5 votes

Comment changer la couleur et/ou le dessin du séparateur de TabWidget dans Android?

Je suis en train d'utiliser un TabLayout et j'ai des images personnalisées pour les onglets que j'utilise, mais pour la vie de moi je ne peux pas comprendre comment changer la couleur ou même l'image du séparateur entre les onglets et le contenu de l'onglet. J'ai essayé d'utiliser setDividerDrawable(), mais cela plante quand je l'appelle avant de définir le contenu de l'onglet et ne fait tout simplement rien quand je l'appelle après. Si je pouvais juste le mettre en noir ça serait suffisant, mais jusqu'à présent rien n'a fonctionné. Merci pour toute guidance.

9voto

tarrant Points 498

Vous devez faire ceci : tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

Où R.drawable.tab_divider est une image dans votre répertoire de ressources.

Mais la clé est que vous devez le faire AVANT d'avoir ajouté des onglets à l'hôte d'onglets.

Mon code d'initialisation des onglets ressemble à ceci :

private void initializeTabs(int curTab) {
    this.tabHost = getTabHost();
    tabHost.clearAllTabs();

    TabSpec ts1, ts2, ts3, ts4, ts5;
    // séparateur d'onglets
    tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);

    ts1 = this.setupTab(new TextView(this), tabHost, R.drawable.browse_tab_normal, 
            mResources.getString(R.string.Browse));

    ts2 = this.setupTab(new TextView(this), tabHost, R.drawable.search_tab_normal, 
            mResources.getString(R.string.Search));

    ts3 = this.setupTab(new TextView(this), tabHost, R.drawable.postad_tab_normal, 
            mResources.getString(R.string.Post));

    ts4 = this.setupTab(new TextView(this), tabHost, R.drawable.watchlist_tab_normal, 
            mResources.getString(R.string.WatchList));

    ts5 = this.setupTab(new TextView(this), tabHost, R.drawable.managead_tab_normal, 
            mResources.getString(R.string.Login));

    // intents
    ts1.setContent(new Intent().setClass(this, BrowseTabActivity.class));
    ts2.setContent(new Intent().setClass(this, SearchTabActivity.class));
    ts3.setContent(new Intent().setClass(this, PostAdTabActivity.class));
    ts4.setContent(new Intent().setClass(this, WatchlistTabActivity.class));
    ts5.setContent(new Intent().setClass(this, LoginTabActivity.class));

    tabHost.addTab(ts1);
    tabHost.addTab(ts2);
    tabHost.addTab(ts3);
    tabHost.addTab(ts4);
    tabHost.addTab(ts5);

...

0voto

Dmitry Nevzorov Points 370

La meilleure façon de définir un séparateur est de le créer à partir de votre balisage XML :

Ainsi, vous pouvez définir un drawable directement depuis le balisage. Notez que vous devez utiliser android:divider ainsi que android:showDividers="middle" pour placer les séparateurs entre les onglets. Pour en savoir plus, consultez la spécification et prêtez attention aux propriétés héritées de LinearLayout - docs sur google

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X