web-dev-qa-db-fra.com

comment changer la couleur de la police dans les éléments ListView sélectionnés / ciblés?

Je lutte avec cela, ce qui est apparemment un effet très simple, mais je n'ai incroyablement trouvé aucun moyen intuitif de le faire dans Android.

J'ai un ListView et j'ai réussi à personnaliser les images d'arrière-plan afin que l'élément sélectionné soit mis en évidence en obtenant un nouvel arrière-plan dessinable. Cela, je crée un nouveau style dans lequel j'ai défini l'attribut Android: listSelector pour pointer un StateListDrawable où j'ai spécifié les tiroirs à utiliser pour chaque état.

Cependant, chaque élément ListView est un LinearLayout où j'ai deux TextViews. Mon objectif est de pouvoir changer la couleur du texte de ces vues enfant à chaque fois que le parent est sélectionné ou pressé, en même temps que le dessin en arrière-plan. Je sais qu'il y a ColorStateList mais je n'ai pas réussi à le configurer.

Quelqu'un a-t-il réussi à faire fonctionner quelque chose comme ça?

Merci.

36
alfred

Aucune de ces réponses n'est possible lorsque votre ListView est compromis d'une mise en page qui a plusieurs vues. Vous devez définir les vues de votre enfant sur:

Android:duplicateParentState="true"

Vous pouvez maintenant utiliser les méthodes décrites ci-dessus pour déclarer les couleurs de vos TextViews à l'aide d'un sélecteur tel que:

Android:textColor="@drawable/my_row_selector"

et je suis sûr que vous le savez, mais le sélecteur peut être aussi simple que:

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

Comme vous pouvez le voir, les valeurs @color sont autorisées. J'espère que cela t'aides.

Aussi - Android: state_pressed est utilisé en conjonction avec AdapterView.OnItemClickListener.

68
AndrewPK

dans vos propriétés textview

Android:textColor="@color/text_selector"

dans res/color 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="YOUR_CUSTOM_COLOR" />
    <item Android:state_selected="true" Android:color="YOUR_CUSTOM_COLOR" />
    <item Android:color="YOUR_CUSTOM_COLOR" />
</selector>
23
android.mu

Pour que cela fonctionne sur la sélection, utilisez le code suivant:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:color="#fff"/>
    <item Android:state_activated="true" Android:color="#fff"/>
    <item Android:color="#000" />
</selector>

Apparemment, la clé est state_activated="true" Etat.

11
Manuel Escrig

Lorsque vous déployez l'application pour Android 11+ (HoneyComb +), vous devez utiliser

Android:state_activated="true"

pour l'état de liste sélectionné. Pour les versions antérieures, utilisez la combinaison de:

Android:state_checked="true"
Android:state_activated="true"

Bien sûr, n'oubliez pas d'inclure le

Android:duplicateParentState="true"

de sorte que la vue puisse obtenir l'état activé/vérifié à partir d'un élément de vue de liste parent

2
Ivan Kravchenko

Vous pouvez également créer un res/color dossier et ajoutez un fichier "text_selector.xml" avec les lignes suivantes:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_activated="true" Android:color="#f0f"/>
    <item Android:state_pressed="true" Android:color="#f0f"/>
    <item Android:color="#000"/>
</selector>

Après cela, affectez dans TextView:

Android:textColor="@color/text_selector"
1
CoolMind