36 votes

Comment changer la couleur de la police dans les éléments ListView sélectionnés/focalisés ?

J'ai du mal avec cet effet qui est apparemment très simple mais je n'ai pas trouvé de méthode intuitive pour le faire dans Android.

J'ai un ListView et j'ai réussi à personnaliser les images d'arrière-plan pour que l'élément sélectionné soit mis en évidence en obtenant un nouveau drawable d'arrière-plan. Pour ce faire, je crée un nouveau style dans lequel je définis la propriété Android:listSelector pour pointer un StateListDrawable où j'ai spécifié les éléments de dessin à utiliser pour chaque État.

Cependant, chaque élément de ListView est une LinearLayout dans laquelle j'ai deux TextViews. Mon but est de pouvoir changer la couleur du texte de ces vues enfant lorsque le parent est sélectionné ou pressé, en même temps que le background drawable. Je sais qu'il existe une fonction Liste des états des couleurs mais je n'ai pas réussi à le mettre en place.

Quelqu'un a-t-il réussi à faire fonctionner un tel système ?

Gracias.

68voto

AndrewPK Points 3142

Aucune de ces réponses n'est possible lorsque votre ListView fait partie d'une mise en page comportant plusieurs vues. Vous devez définir vos vues 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 constater, les valeurs @color sont autorisées. J'espère que cela vous aidera.

De plus, Android:state_pressed est utilisé en conjonction avec l'écouteur AdapterView.OnItemClickListener.

23voto

android.mu Points 139

Dans les propriétés de la vue de texte

android:textColor="@color/text_selector"

en rouge/couleur 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>

11voto

Manuel Escrig Points 416

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" état.

2voto

Ivan Kravchenko Points 696

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

android:state_activated="true"

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

android:state_checked="true"
android:state_activated="true"

Bien entendu, n'oubliez pas d'inclure le

android:duplicateParentState="true"

pour que la vue puisse obtenir l'état activé/contrôlé d'un élément de la vue en liste parentale

1voto

CoolMind Points 11

Vous pouvez également créer un res/color et ajoutez un fichier "text_selector.xml" contenant 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, assigner dans TextView :

android:textColor="@color/text_selector"

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