52 votes

Utilisation du sélecteur pour changer la couleur du texte TextView

J'essaie d'utiliser un TextView pour définir le style d'un TabWidget sur un tabhost.

Je viens de créer un sélecteur pour bgcolor et ça marche bien, mais je veux faire un sélecteur pour textColor mais la couleur du texte ne change pas :

Voici mon tab_text_selector.xml :

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />

</selector>

Et voici le code lorsque j'essaie d'utiliser sur un textView :

 TextView txtTab=new TextView(this);
        txtTab.setTextColor(R.drawable.tab_text_selector);
        txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
        txtTab.setGravity(Gravity.CENTER);
        txtTab.setText("Agregar Idea");

Je sais que la couleur du texte doit être blanche dans tous les cas, mais ce n'est pas le cas.

104voto

Sagar Shah Points 824

1) Utilisez tab_text_selector.xml comme ci-dessous et placez-le dans le dossier res/color :

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />
    <item android:color="#504f4f" /> <!-- default case -->
</selector>

Et réglez-le sur votre textview comme ci-dessous.

 TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));

2) La deuxième option est Si vous utilisez textview en XML plutôt que par programmation, utilisez tab_text_selector.xml comme ci-dessous :

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="TextView"
    android:textColor="@drawable/tab_text_selector" />

30voto

ρяσѕρєя K Points 51253

Utilisez de cette façon :

tab_text_selector.xml :

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:color="#FF111111"/>  
    <item android:state_focused="true" android:color="#FF222222"/>    
    <item android:state_selected="true" android:color="#FF333333"/> 
</selector>

Affichage:

 TextView txtTab = new TextView(this);

XmlResourceParser xrp = getResources().getXml(R.drawable.tab_text_selector);  
try {  
    ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);  
    txtTab.setTextColor(csl);  
} catch (Exception e) {  } 

txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");

Mais il vaut mieux mettre de la couleur en /res/color/yourcolor.xml

7voto

mr.boyfox Points 3704

@ffleandro, @ K répond à la meilleure variante, je pense que l'utilisation de ColorStateList est le meilleur choix pour les anciennes et les dernières versions d'Android.

 int[][] states = new int[][] {
    new int[] { android.R.attr.state_pressed}, // pressed
    new int[] { android.R.attr.state_focused}, // focused
    new int[] {}
};
int[] colors = new int[] {
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.white)  // white
};
ColorStateList list = new ColorStateList(states, colors);
mTextView.setFocusable(true);
mTextView.setClickable(true);
mTextView.setTextColor(list);

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