Cómo utilizar selectores para cambiar iconos con el nuevo TabLayout

Estoy usando el nuevo soporte TabLayout de Android. La cuestión es que quería usar selectores para cambiar el icono cuando se selecciona una pestaña.

He estado buscando en el código fuente y me parece que el nunca cambia el estado de la vista (y por eso no puedo usar el selector).

¿Alguien sabe alguna solución?

¡Gracias!

Hay manera de configurar customView como una pestaña con el método setCustomView (View view) . Por lo tanto, puede crear una vista de texto y establecer un selector y establecer esta vista en pestaña.

Espero que te ayude!

Suponga que su my_selector.xml es,

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/icon_on" android:state_selected="true"/> <item android:drawable="@drawable/icon_off"/> <!-- default --> </selector> 

Entonces usted puede llamar a setIcon directamente,

 tab.setIcon(R.drawable.my_selector); 

Verificado con 'com.android.support:design:22.2.0'.

Encontré que cuando primero fijé la opinión de encargo para cada lengüeta en el TabLayout necesito fijar el primer (índice 0) como seleccionado.

  TabLayout toolbarTabLayout = (TabLayout) findViewById(R.id.tabs); toolbarTabLayout.setupWithViewPager(mViewPager); toolbarTabLayout.setTabGravity(TabLayout.GRAVITY_FILL); toolbarTabLayout.setTabMode(TabLayout.MODE_FIXED); toolbarTabLayout.setTabTextColors(R.color.colorPrimary, R.color.white); // Iterate over all tabs and set the custom view for (int i = 0; i < toolbarTabLayout.getTabCount(); i++) { TabLayout.Tab tab = toolbarTabLayout.getTabAt(i); View v=mSectionsPagerAdapter.getTabView(i); // no tabs are actually selected at start, this will make sure the // selector for the colors comes in right when initialized if (i==0) v.setSelected(true); tab.setCustomView(v); } 

Esto parece forzar la primera pestaña como seleccionada cuando se aplica la vista personalizada. Realmente se siente como un hack, espero que alguien más se va a resolver el problema real y proponer una mejor solución.

Si lo hizo todo bien (y creo que esto) por lo que llegó en el mismo punto que yo. Tal vez sea un pequeño error en la nueva librería androide appcompat.

He encontrado una solución (se llama Gambiarra en un buen Portugues) para resolver este problema. Usted necesita llamar al método select () de la clase Tab como esto:

 mTabLayout.getTabAt(x).select(); 

PERO es muy importante: la variable x debe ser diferente del índice de tabulación seleccionado actual.

Esto es lo que funcionó para mí:

Asumiendo que usted tiene sus selectores fijados en la carpeta de res dibujable (como Xingang Huang demostrado arriba). En su MainActivity (donde se configura su TabLayout) se incluye la matriz de selectores de iconos y luego se realiza un bucle como:

 for (int i = 0; i < yourTabLayout.getTabCount(); i++) { ImageView imageView = new ImageView(this); //your context, in this case MainActivity.class imageView.setImageResource(arr_tabIcons[i]); //tabIcons is the array of icons if (i==0) { imageView.setSelected(true); } yourTabLayout.getTabAt(i).setCustomView(imageView); } 

Tab.setIcon (R.drawable.icon)

Funciona también, pero en mi caso los iconos parecían muy pequeños, así que tuve que usar la solución con el ImageView para llenar la vista de pestañas.

Codificación feliz;)

  • Espacio en blanco con CardView en dispositivos pre-pirulí
  • Android 5: botón debajo de la barra de softnavigation (herencia de Showcaseview)
  • Obstáculos extraños al hacer que los botones parezcan Spinners en API 21
  • Cómo implementar 'tablas de datos' (componente de diseño de material) en android?
  • Android Material: El color de la barra de estado no cambiará
  • Android L - Botón de acción flotante (FAB)
  • Cambiar el tema de diseño predeterminado a color personalizado?
  • Android BottomSheet: Está buscando bajo la barra de herramientas
  • Compatibilidad con el diseño del material
  • El cuadro de diálogo de alerta de Android no está bien diseñado en Lollipop
  • Diseño de materiales Tipografía - Titulares, Títulos, Espaciado, Aspecto de texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.