2010-03-30 26 views
6

No sé lo que hice pero durante un tiempo mi TabWidget tenía pestañas de color blanco que se veían muy bien. Nunca configuré un tema o color de fondo/primer plano en mi proyecto. La próxima vez que lo compilé volvió a las pestañas grises. Mi aplicación está usando el tema oscuro predeterminado. Incluso si configuro el tema de la aplicación a la luz, las pestañas siguen siendo grises. Entonces, obviamente, fue algo más que cambió el color de las pestañas. Alguien sabe cómo hacer esto?TabWidget color blanco en primer plano?

+0

¿Está quizá probando en dos versiones diferentes de la plataforma? El estilo de la pestaña cambió en 2.0. Además, si pudieras publicar una captura de pantalla, tomada con 'DDMS', sería de gran ayuda. –

+0

Ah, sí. Fue a partir de la compilación de 1.6. ¿Hay alguna manera de configurar manualmente el mismo color para 2.0+? – Monstieur

+0

Tuve este problema y determiné que era el atributo 'targetSdkVersion' en AndroidManifest.xml lo que causaba que cambiara. –

Respuesta

15

I estaba teniendo un problema debido a un error en el tema de luz de Android 1.6 (el texto del indicador de pestaña es blanco). Yo era capaz de anular el tema por defecto de la siguiente manera:

  1. he creado un tema personalizado que hereda del tema por defecto:

styles.xml:

<style name="MyTheme" parent="@android:style/Theme.Light"> 
    <item name="android:tabWidgetStyle">@style/LightTabWidget</item> 
</style> 

<style name="LightTabWidget" parent="@android:style/Widget.TabWidget"> 
    <!-- set textColor to red, so you can verify that it applied. --> 
    <item name="android:textColor">#f00</item> 
</style> 

Entonces sólo aplico ese tema a mi aplicación agregando android:theme="@style/MyTheme" al elemento <application /> de mi AndroidManifest.xml.

+0

gracias steve, me ayudó y tú me hiciste la vida –

1

en el public void onCreate(Bundle savedInstanceState)

  `tabHost = getTabHost(); 
      tabHost.setOnTabChangedListener(this); 
    tabHost.setCurrentTab(0); 
    setTabColor();` 

que en el oyente:

public void onTabChanged (String tabid) { setTabColor();

finalmente la función, que establece el primer plano y el fondo también:

public void setTabColor() { 
    // set foreground color: 
    for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
     RelativeLayout rl = (RelativeLayout) tabHost.getTabWidget().getChildAt(i); 
     ImageView imageView = (ImageView) rl.getChildAt(0);// change it if you want it 
     TextView textView = (TextView) rl.getChildAt(1);//   
     textView.setTextColor(Color.parseColor("#FFFFFF")); 
    } 

    // set background color: 
    for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
     tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#010101")); // unselected 
    } 
    tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#121288")); // selected 
} 
0

En onCreated():

tabHost.setCurrentTab(0); 

// Set tabs text color to white: 
TabWidget tabWidget = tabHost.getTabWidget(); 
int whiteColor = getResources().getColor(R.color.white); 
int someOtherColor = getResources().getColor(R.color.someOtherColor); 
for(int i = 0; i < tabWidget.getChildCount(); i++){ 
    View tabWidgetChild = tabWidget.getChildAt(i); 
    if(tabWidgetChild instanceof TextView){ 
     ((TextView) tabWidgetChild).setTextColor(whiteColor); 
    } else if(tabWidgetChild instanceof Button){ 
     ((Button) tabWidgetChild).setTextColor(whiteColor); 
    } else if(tabWidgetChild instanceof ViewGroup){ 
     ViewGroup vg = (ViewGroup)tabWidgetChild; 
     for(int y = 0; y < vg.getChildCount(); y++){ 
      View vgChild = vg.getChildAt(y); 
      if(vgChild instanceof TextView){ 
       ((TextView) vgChild).setTextColor(whiteColor); 
      } 
     } 
     vg.setBackgroundColor(someOtherColor); 
    } 
} 
Cuestiones relacionadas