web-dev-qa-db-fra.com

Comment définir ColorStateList pour TextView?

Lorsque ma ListViewItem est en surbrillance, je souhaite que le texte devienne blanc. Comment puis-je définir cela?

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item Android:state_focused="true" Android:color="@color/testcolor1"/>
   <item Android:state_pressed="true" Android:state_enabled="false" Android:color="@color/testcolor2" />
   <item Android:state_enabled="false" Android:color="@color/testcolor3" />
   <item Android:color="@color/testcolor5"/>
 </selector>
29
Sheehan Alam

Créez un fichier res/drawable/text_color.xml:

 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true" Android:state_pressed="false" Android:color="#ffffff" />
    <item Android:state_focused="true" Android:state_pressed="true" Android:color="#ffffff" />
    <item Android:state_focused="false" Android:state_pressed="true" Android:color="#ffffff" />
    <item Android:color="#000000" />
</selector>

Utilisez ensuite @drawable/text_color à partir de xml (ou R.drawable.text_color à partir de code) comme couleur de texte pour les éléments de votre liste.

65
Konstantin Burov

En plus de ce que d’autres ont dit plus haut, je voudrais souligner un point, tiré de l’URL ci-dessous.

https://developer.Android.com/reference/Android/content/res/ColorStateList.html

Remarque: La liste des spécifications d'état sera mise en correspondance dans l'ordre dans lequel elles apparaissent dans le fichier XML. Pour cette raison, des éléments plus spécifiques doivent être placés plus tôt dans le fichier. Un élément sans spécification d'état est considéré comme correspondant à tout ensemble d'états et est généralement utile en tant qu'élément final à utiliser par défaut.

Il est important que vous ayez la condition la plus large vers le bas dans la balise de sélection. J'espère que cela t'aides!

1
Rakesh Pillai

Essaye ça...

Tout d’abord, créez une liste d’états de couleur text_color.xml placée dans le répertoire res/color.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" xmlns:tools="http://schemas.Android.com/tools"
    tools:ignore="MissingDefaultResource">
  <item Android:color="#000000" Android:state_enabled="false"/>
  <item Android:color="#FFFFFF"/>
</selector>

Deuxièmement, utilisez 

getColorStateList(@NonNull Context context,
            @ColorRes int id)

méthode pour obtenir la liste d'état de couleur.

textView.setTextColor(ContextCompat.getColorStateList(context, R.color.text_color))

Troisièmement, activez (true) ou désactivez (false) en fonction de vos besoins,

textView.isEnabled = true //when item is highlighted

Bonne codage ...

0
Silambarasan Poonguti