web-dev-qa-db-fra.com

comment changer la couleur du texte de l'indicateur d'onglets dans Android?

comment changer la couleur de l'indicateur de texte de l'onglet? Je peux changer l'icône en utilisant la balise selector référencé le exemple . mais ne peut pas à la couleur du texte. Comment? 

24
Praveen

Le style dans votre changement de thème personnalisé 

<item name="Android:tabWidgetStyle">@Android:style/Widget.TabWidget</item> 

et

<style name="Widget.TabWidget">
        <item name="Android:textAppearance">@style/TextAppearance.Widget.TabWidget</item>
        <item name="Android:ellipsize">Marquee</item>
        <item name="Android:singleLine">true</item>
</style>  


<style name="TextAppearance.Widget.TabWidget">
    <item name="Android:textSize">14sp</item>
    <item name="Android:textStyle">normal</item>
    <item name="Android:textColor">@Android:color/tab_indicator_text</item>
</style>     
24
Alex Volovoy

Voici une nouvelle réponse que j'ai trouvée chez Fred Grott ( http://knol.google.com/k/fred-grott/advance-tabs/ ) après une petite recherche sur le Web .
Cela vous permet de définir une selector pour la couleur du texte afin qu'une couleur différente puisse être utilisée lorsque l'onglet est sélectionné ou non. Ce qui peut être très utile si vous utilisez une couleur d’arrière-plan différente pour l’onglet si celui-ci est sélectionné. Bien sûr, vous pouvez également ajouter une couleur unie et non un sélecteur.

final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(Android.R.id.title);        
tv.setTextColor(this.getResources().getColorStateList(R.color.text_tab_indicator));

Où R.color.text_tab_indicator est un fichier sélecteur xml situé dans votre dossier res/drawable.

En d'autres termes, le texte de l'indicateur est vraiment une variable TextView qui peut être récupérée via l'objet View auquel on peut accéder à partir de l'objet TabWidget .
Jetez un coup d'œil aux exemples de Fred pour plus d'informations et de contexte concernant les déclarations de variable ainsi que d'autres astuces.

30
Danny C

La réponse de Danny C est correcte à 100%. Je voulais simplement ajouter quelque chose pour obtenir une réponse complète avec un fichier de ressources.

Text_tab_indicator sous le fichier res/color 

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:textColor="@color/text_tab_selected"
    Android:state_selected="true" />
<item Android:textColor="@color/text_tab_unselected"
    Android:state_selected="false" />
</selector>

Et ce text_tab_unselected & text_tab_selected ressemblera à ceci dans le dossier colors/values

<resources> 
<color name="text_tab_selected">#ffffff</color>
<color name="text_tab_unselected">#95ab45</color>

Après cela, ajoutez enfin la réponse de Dannyy dans un fichier de classe d'onglets

final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(Android.R.id.title);        
tv.setTextColor(this.getResources().getColorStateList(R.color.text_tab_indicator));
20
Shahzad Imam

Le changement de couleur peut également être indiqué sans utiliser Java - ce qui est probablement meilleur.

J'ai apporté des modifications à text_tab_indicator (notifiez que textColor a été remplacé par 'color'):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true" Android:color="@color/text_tab_selected" />
    <item Android:state_selected="false" Android:color="@color/text_tab_unselected" />
</selector>

Définissez le style de TabWidget pour qu'il pointe vers un style spécifique dans votre code XML:

<TabWidget
    ...
    style="@style/TabText"
    />

Déclarez votre text_tab_indicator situé dans/res/color comme couleur désirée dans le style

<style name="TabText">
    <item name="Android:textColor">@color/tab_text_color</item>
</style>

Cela a fonctionné comme un charme (pour moi).

À la vôtre, Randall

6
javahead76

Essayez ColorStateLists . Bonne chance.

0
trgraglia