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