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).
- Error: (2, 0) Plugin con id 'com.github.dcendents.android-maven' no encontrado
- CardView Haga clic en estado no funciona
- Icono de navegación de la barra de herramientas nunca configurado
- El color primario (a veces) se vuelve transparente
- Inbox de Google como elemento de RecyclerView abrir animación
¿Alguien sabe alguna solución?
¡Gracias!
- Android Spinner Reveal Animation Diseño de materiales
- No funciona Notifydatasetchange en RecyclerView con selección de centro Horizontal Scrollview?
- Cambio de Android Color de sombra de elevación de material
- ¿Por qué mi vista de barra de acciones personalizadas no coincide con "parent" cuando se utiliza appcompat y Toolbar?
- La propiedad de elevación no funciona android
- Cómo hacer que un spinner material de diseño surgen de un CardView
- Cómo utilizar TabLayout con la barra de herramientas dentro de CollapsingToolbarLayout?
- Android TimePickerDialog color del diseño del material
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;)
- Android: windowNoTitle no ocultará la barra de acción con appcompat-v7 21.0.0
- Concatenar dos cadenas