TabWidget, pestaña actual, color de la línea inferior

Tengo un TabWidget para el que he habilitado y configurado stripLeft y stripRight

 mTabHost.getTabWidget().setStripEnabled(true); mTabHost.getTabWidget().setRightStripDrawable(R.drawable.redline); mTabHost.getTabWidget().setLeftStripDrawable(R.drawable.redline); 

Como puede ver en la imagen a continuación, esto no cambia el color de la línea inferior de la pestaña seleccionada actualmente (TAB 2).

enter image description here

¿Cómo puedo cambiar el color de la línea inferior de la pestaña actualmente seleccionada que está predeterminada en azul en este momento? (Supongo que el color azul se establece en el estilo predeterminado de AppTheme en styles.xml ).

Miré esta respuesta pero no dice cómo cambiar el color …

El color del indicador de tabs se establece mediante un selector dibujable que se puede encontrar aquí y se ve así:

                 

Los dibujables que utiliza el selector están todos coloreados en azul claro. Puede reemplazar esos diseños con sus propias versiones recolored. Los originales se ven así (los originales son pequeños, enlaces incluidos):

  • tab_unselected_holo tab_unselected_holo
  • tab_selected_holo tab_selected_holo
  • tab_unselected_focused_holo tab_unselected_focused_holo
  • tab_selected_focused_holo tab_selected_focused_holo
  • tab_unselected_pressed_holo tab_unselected_pressed_holo
  • tab_selected_pressed_holo tab_selected_pressed_holo

Deberá copiar el selector anterior en su propio proyecto junto con los dibujables. Luego querrás volver a colorear los dibujantes al color que quieras que sean. Luego, querrá configurar su selector como fondo para sus indicadores de tabs. Puedes hacerlo así (después de configurar tus tabs):

 TabHost host = (TabHost)view.findViewById(R.id.tab_host); TabWidget widget = host.getTabWidget(); for(int i = 0; i < widget.getChildCount(); i++) { View v = widget.getChildAt(i); // Look for the title view to ensure this is an indicator and not a divider. TextView tv = (TextView)v.findViewById(android.R.id.title); if(tv == null) { continue; } v.setBackgroundResource(R.drawable.your_tab_selector_drawable); } 

Puede haber una manera más fácil de hacerlo estableciendo su propio diseño de indicador de cliente con un selector de fondo, pero esto es lo que me resultó más fácil.

Así es como cambié mis tabs,

 private void changetabs(TabWidget tabWidget) { // Change background for(int i=0; i < tabWidget.getChildCount(); i++) tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_selector); } 

y mi tab_selector.xml

               

Espero que ayude a alguien.

En caso de que alguien lo encuentre, existe una herramienta en línea para construir rápidamente los dibujos (9 parches) para las tabs. Simplemente selecciona el color y presiona el botón Aquí tienes …

Gracias a Jeff Gilfelt


El generador de estilos de Action Bar de Android te permite crear fácilmente un estilo de barra de acción personalizado sencillo, atractivo y sin fisuras para tu aplicación Android. Generará todos los nueve recursos de parches necesarios, más los estilos y estilos XML asociados que puede copiar directamente en su proyecto.

http://jgilfelt.github.io/android-actionbarstylegenerator/

Puede usar la aplicación: tabIndicatorColor para este propósito. Cambiará el color de la línea del indicador de tabs seleccionado de acuerdo con sus requisitos.

  

Puedes usar un filtro,
Esto se aplicará a la región que no sea transparente

 tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 

Una línea de código: no es necesario cambiar los estados.

El color de énfasis se usa por defecto como color de tabulación activa. Puede establecerlo / cambiarlo en el archivo style.xml :

  

Mi manera de resolver este problema es usar setBackgroundResource. En primer lugar, debe crear exactamente el mismo fondo de

line_label_1_pressed.xml

        

line_label_1.xml

      

y luego crea tab_selector.xml como sigue

    

luego setbackgroudResource usando tab_selector.xml

  

Encontré otra solución, abra styles.xml y cambie una línea:

res -> valores -> styles.xml

   

Solo usa algo como

 tabHost.setSelectedTabIndicatorColor(Color.WHITE);