Essayer de changer la couleur du texte tabhost, dans ce code je peux changer la couleur de fond de tabhost
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i)
.setBackgroundColor(Color.parseColor("#FF0000")); // unselected
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab())
.setBackgroundColor(Color.parseColor("#0000FF")); // selected
}
});
comment puis-je changer la couleur du texte tabhost?
Vous pouvez changer la couleur du texte Tabhost comme suit.
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); // unselected
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(Android.R.id.title); //Unselected Tabs
tv.setTextColor(Color.parseColor("#ffffff"));
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
TextView tv = (TextView) tabhost.getCurrentTabView().findViewById(Android.R.id.title); //for Selected Tab
tv.setTextColor(Color.parseColor("#000000"))
}
});
MODIFIER:
Pour définir la couleur du texte initialement dans votre activité, vous pouvez utiliser ce code dans la fonction onResume()
TabHost tabhost = getTabHost();
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(Android.R.id.title);
tv.setTextColor(Color.parseColor("#000000"));
}
Cela peut réellement être fait en utilisant des thèmes XML. La TabWidget
utilise Android:textColorPrimary
pour l'onglet sélectionné et Android:textColorSecondary
pour ceux qui n'ont pas été sélectionnés. Ainsi, vous pouvez obtenir un changement de couleur du texte comme ceci:
Dans styles.xml:
<style name="TabWidgetTheme" parent="AppTheme">
<item name="Android:textColorPrimary">@color/your_primary_color</item>
<item name="Android:textColorSecondary">@color/your_secondary_color</item>
</style>
Dans votre mise en page:
<TabHost
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:theme="@style/TabWidgetTheme"/>
Notez que le Android:theme
ne devrait pas être directement dans la TabWidget
elle-même, mais plutôt dans le TabHost
ou similaire.
Pour changer la couleur du texte des onglets, vous devez obtenir la vue i.e TextView qui est définie comme titre des onglets et vous pouvez la changer comme ceci:
TabHost tabhost = getTabHost();
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(Android.R.id.title);
tv.setTextColor(Color.parseColor("#000000"));
}
MODIFIER :
Une autre méthode consiste à créer une vue personnalisée pour vos onglets. lorsque vous ajoutez des onglets à votre tabHost
FragmentTabHost tabHost;
tabHost = (FragmentTabHost) findViewById(Android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(), R.id.frame);
// crée customView pour chaque onglet Voir tabViewHome = createTabView (tabHost.getContext (), "Home", R.drawable.ic_home);
tabHost.addTab(tabHost.newTabSpec("Home").setIndicator(tabViewHome), HomeActivity.class, null);
private static View createTabView(final Context context, final String text, int iconId)
{
// inflate your layout here
View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
TextView tv = (TextView) view.findViewById(R.id.tab_tv_title);
tv.setText(text);
tv.setTextColor(Color.RED);
ImageView iv = (ImageView) view.findViewById(R.id.tab_background_iv_icon);
iv.setImageResource(iconId);
return view;
}
et votre tab_layout.xml sera comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/tabsLayout"
Android:layout_width="fill_parent"
Android:layout_height="40dip"
Android:gravity="center"
Android:orientation="vertical"
Android:padding="5dip"
Android:background="#AAE1E1E1">
<ImageView
Android:id="@+id/tab_background_iv_icon"
Android:layout_width="30dip"
Android:layout_height="30dip"
Android:contentDescription="@string/imgDesc"
/>
<TextView
Android:id="@+id/tab_tv_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
//Android:textColor="@drawable/tab_text_selector"
Android:textSize="8sp"
Android:textStyle="bold" />
</LinearLayout>
J'espère que cela t'aides.
Ehi man, j'ai utilisé cette solution pour:
private void setNewTab(final String tag, final String title, final Class<?> clazz, final Bundle bundle) {
TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag);
tabSpec.setIndicator(InfoTabView_.build(getActivity()).bind(title, false));
tabHost.addTab(tabSpec, clazz, bundle);
}
...
bundle = new Bundle();
bundle.putSerializable(FaqFragment.ARG_FAQS, infos.getFaq());
setNewTab("faq", "Faq", FaqFragment_.class, bundle);
...
@EViewGroup(R.layout.view_info_tab)
public class InfoTabView extends RelativeLayout {
....
@Override
public void setSelected(final boolean selected) {
if (selected)
titleTextView.setTextColor(selectedColor);
else
titleTextView.setTextColor(unselectedColor);
}
}
remplacer setSelected est le moyen le plus propre!