¿Cómo cambio el fondo de un widget de tabs de Android?

Mi clase se extiende extiende TabActivity

TabHost mTabHost = getTabHost(); TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); tab1 .setIndicator("title tab1"); tab2 .setIndicator("title tab2"); mTabHost.addTab(tab1);mTabHost.addTab(tab2); TabHost.setCurrentTab(0 or 1) 

¿Alguien puede guiarme cómo puedo cambiar la imagen de fondo o el color de la pestaña seleccionada?

¿Qué ocurre si te registras en los eventos de TabHost.OnTabChanged y llamas a mTabHost.getCurrentTabView () para obtener la Vista y luego view.setBackgroundResource ()?

Esto configurará los colores de tu pestaña:

 public static void setTabColor(TabHost tabhost) { for(int i=0;i 

y si lo coloca dentro de theTabChangedListener (), mantendrá el color correcto para las tabs seleccionadas.

Como se mencionó en mbaird, la mejor solución es utilizar el fondo con el selector, por lo que no es necesario que onTabChanged y onTabChanged la actualización manual. El código mínimo está aquí:

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

Donde tab_bg es un xml dibujable con selector:

     

Para la personalización completa de la pestaña, agregaré el código para cambiar el estilo del texto de la pestaña usando un tema personalizado. Agregue esto a styles.xml :

      

Para usar este tema, defínalo en AndroidManifest.xml:

  

Y ahora tiene widgets de tabs con fondo personalizado y estilo de texto personalizado .

¿ Esto resuelve tu problema? Básicamente llamando a setBackgroundDrawable en cada vista de pestaña con un selector?

 > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); 

Utilice .setBackgroundResource y tabNselector es un XML – tabNselector.xml

       

Establecí el parámetro ‘android: background’ en el elemento TabWidget del XML para dar el fondo genérico de todas las tabs.

Luego pasé las vistas infladas de otro XML en el método ‘.setIndicator’.

  View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null); TextView label = (TextView) v.findViewById(R.id.tabLabel); label.setText("Whatever"); tab1 .setContent(v); 

Siento que es una forma más agradable de hacer esto.