Android: cambie el color del texto de la pestaña mediante progtwigción

Tengo un TabHost como este:

        

Y estoy agregando tabs a este TabHost mediante progtwigción de esta manera:

 tabHost = (TabHost)findViewById(android.R.id.tabhost); tabHost.setOnTabChangedListener(this); /* tid1 is firstTabSpec Id. Its used to access outside. */ TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); TabSpec secondTabSpec = tabHost.newTabSpec("tid2"); TabSpec ThirdTabSpec = tabHost.newTabSpec("tid3"); /* TabSpec setIndicator() is used to set name for the tab. */ /* TabSpec setContent() is used to set content for a particular tab. */ firstTabSpec.setIndicator("Tab1", getResources().getDrawable(R.drawable.tab1)); secondTabSpec.setIndicator("Tab2", getResources().getDrawable(R.drawable.tab2)); ThirdTabSpec.setIndicator("Tab3", getResources().getDrawable(R.drawable.tab3)); firstTabSpec.setContent(new Intent(this,FirstTab.class)); secondTabSpec.setContent(new Intent(this,SecondTab.class)); ThirdTabSpec.setContent(new Intent(this,ThirdTab.class)); /* Add tabSpec to the TabHost to display. */ tabHost.addTab(firstTabSpec); tabHost.addTab(secondTabSpec); tabHost.addTab(ThirdTabSpec); for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) { tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#121312")); } tabHost.getTabWidget().setCurrentTab(0); tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#f1a026")); 

Y aquí está el eventoTabChanged:

 public void onTabChanged(String tabId) { // TODO Auto-generated method stub for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) { tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#121312")); } tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#f1a026")); } 

En el evento onTabChanged, también quiero cambiar el color del texto de todas las tabs. Por favor, ayúdame ¿cómo puedo cambiar el color del texto de las tabs en el evento?

Gracias,

Para cambiar el color del texto de las tabs, necesita obtener la vista, es decir, TextView, que está configurado como título de las tabs y puede cambiarlo de esta manera:

  TabHost tabhost = getTabHost(); for(int i=0;i 

espero que esto ayude....

Para el nuevo diseño de pestaña de soporte de diseño; puedes definirlo en tu xml
app:tabTextColor="@color/tab_inactive" app:tabSelectedTextColor="@color/tab_active"
P.ej –

  

Progtwigticamente se puede lograr así:

 tabLayout.setTabTextColors(ContextCompat.getColorStateList(this, R.color.tab_selector)); tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.indicator)); 

Para mí, la solución de @Farhan no funcionaba, ya que getChildCount() seguía devolviendo 1 mientras tenía cuatro tabs. El uso de getTabCount() y getChildTabViewAt() me lo resolvió:

 for (int tabIndex = 0 ; tabIndex < mTabHost.getTabWidget().getTabCount() ; tabIndex ++) { View tab = mTabHost.getTabWidget().getChildTabViewAt(tabIndex); TextView t = (TextView)tab.findViewById(android.R.id.title); t.setTextColor(getResources().getColor(R.color.white)); } 

Pensé que publicaría esta alternativa para las personas que tienen el mismo problema.

Cuando utiliza findViewById (id) le pide al sistema que busque cualquier vista con el ID “id” con respecto al grupo de vista actual. Eso significa que lo que haces en tu código es este .findViewById (id), por lo que buscará “id” en la vista actual. Y hacer findViewById (android.R.id.tabHost) no es muy inteligente porque simplemente no existe …

Sin embargo, cuando obtienes TabHost (), le pides al sistema que obtenga el tabHost único de tu actividad, sin importar si tiene Vista como raíz, es decir, el tabHost no se puede adjuntar a nada al alza.

Como conclusión, siempre debes usar getTabHost en tu TabHostActivity

Espero que fuera claro