web-dev-qa-db-fra.com

Android tabhost change le style de couleur du texte

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? 

13
user3345767

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"));
    } 
54
Mukesh Kumar Singh

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.

9
Will Molter

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.

4
Ankit Dhadse

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!

0
user3024665