TabWidget couleur de la ligne de fond de l’onglet actuel

J’ai un TabWidget pour lequel j’ai activé et définir le ssortingpLeft et ssortingpRight

 mTabHost.getTabWidget().setSsortingpEnabled(true); mTabHost.getTabWidget().setRightSsortingpDrawable(R.drawable.redline); mTabHost.getTabWidget().setLeftSsortingpDrawable(R.drawable.redline); 

Comme vous pouvez le voir sur l’image ci-dessous, cela ne change pas la couleur de la ligne inférieure de l’onglet actuellement sélectionné (ONGLET 2).

entrer la description de l'image ici

Comment puis-je changer la couleur de la ligne inférieure de l’onglet actuellement sélectionné, qui est actuellement définie en bleu? (Je suppose que la couleur bleue est définie dans le style AppTheme par défaut dans styles.xml .)

J’ai regardé cette réponse mais elle ne dit pas comment changer la couleur …

La couleur de l’indicateur de tabulation est définie par un sélecteur pouvant être trouvé ici et ressemble à ceci:

                 

Les tirables utilisés par le sélecteur sont tous colorés en bleu clair. Vous pouvez remplacer ces tirables par vos propres versions recolourées. Les originaux ressemblent à ceci (les originaux sont petits, liens inclus):

  • tab_unselected_holo tab_unselected_holo
  • tab_selected_holo tab_selected_holo
  • tab_unselected_focused_holo tab_unselected_focused_holo
  • tab_selected_focused_holo tab_selected_focused_holo
  • tab_unselected_pressed_holo tab_unselected_pressed_holo
  • tab_selected_pressed_holo tab_selected_pressed_holo

Vous voudrez copier le sélecteur ci-dessus dans votre propre projet avec les tirables. Ensuite, vous voudrez recolorer les tirables à la couleur de votre choix. Ensuite, vous voudrez définir votre sélecteur comme arrière-plan pour vos indicateurs d’onglet. Vous pouvez le faire comme ça (après avoir configuré vos tabs):

 TabHost host = (TabHost)view.findViewById(R.id.tab_host); TabWidget widget = host.getTabWidget(); for(int i = 0; i < widget.getChildCount(); i++) { View v = widget.getChildAt(i); // Look for the title view to ensure this is an indicator and not a divider. TextView tv = (TextView)v.findViewById(android.R.id.title); if(tv == null) { continue; } v.setBackgroundResource(R.drawable.your_tab_selector_drawable); } 

Il y a peut-être un moyen plus simple de le faire en définissant votre propre disposition d'indicateur client avec un sélecteur d'arrière-plan, mais c'est ce qui a fonctionné le plus facilement pour moi.

Voici comment j’ai changé mes tabs,

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

et mon tab_selector.xml

               

J'espère que ça va aider quelqu'un.

Si quelqu’un tombe dessus, il existe un outil en ligne permettant de créer rapidement les éléments esquissables (patch 9) pour les tabs. Il suffit de sélectionner la couleur et d’appuyer sur le bouton Ici, vous allez …

Merci à Jeff Gilfelt


Le générateur de style de barre d’action Android vous permet de créer facilement un style de barre d’action personnalisée simple, attrayant et transparent pour votre application Android. Il générera tous les neuf éléments de correctif nécessaires, ainsi que les éléments XML et les styles que vous pouvez copier directement dans votre projet.

http://jgilfelt.github.io/android-actionbarstylegenerator/

Vous pouvez utiliser app: tabIndicatorColor à cette fin. Cela changera la couleur de la ligne d’indicateur de l’onglet sélectionné en fonction de vos besoins.

  

Vous pouvez utiliser un filtre,
Cela sera appliqué à la région qui n’est pas transparente

 tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 

Une ligne de code – pas besoin de changer d’état.

La couleur d’accent est utilisée par défaut comme couleur d’onglet active. Vous pouvez définir / changer dans le fichier style.xml :

  

Ma façon de résoudre ce problème consiste à utiliser setBackgroundResource. Tout d’abord, vous devez créer exactement le même motif

line_label_1_pressed.xml

        

line_label_1.xml

      

puis créez tab_selector.xml comme suit

    

puis setbackgroudResource en utilisant tab_selector.xml

  

J’ai trouvé une autre solution, ouvrez styles.xml et changez une ligne:

res -> valeurs -> styles.xml

   

Utilisez simplement quelque chose comme

 tabHost.setSelectedTabIndicatorColor(Color.WHITE);