73 votes

Couleur du sélecteur de ListView Android

Bonjour à tous,

J'ai deux questions concernant un ListView dans Android :

  1. Comment puis-je obtenir la couleur de la ligne ciblée du listview ? J'ai essayé d'utiliser la fonction ListView.getSelector() qui, selon sa documentation, devrait me donner ce que je cherche, mais elle me donne un objet Drawable dont je ne sais pas comment récupérer la couleur (si possible...).

  2. Comment puis-je set la couleur de la ligne ciblée du listview ? Ici, j'ai essayé d'utiliser la fonction setSelector() sur la liste, en lui passant un objet ColorDrawable, mais le résultat de cette opération est que tout l'arrière-plan de la liste est peint dans cette couleur... et ce n'est pas ce que je voulais bien sûr...

Merci !

89voto

Christopher Orr Points 58514

Le dessinateur de la liste de sélection est un StateListDrawable - il contient la référence à de multiples objets dessinables pour chaque état que la liste peut avoir, comme sélectionné, focalisé, appuyé, désactivé...

Bien que vous puissiez récupérer la table de dessin en utilisant getSelector() je ne crois pas que vous puissiez récupérer un numéro de téléphone spécifique. Drawable d'un StateListDrawable Il ne semble pas non plus possible de récupérer par programme la couleur directement à partir d'un fichier de type ColorDrawable de toute façon.

En ce qui concerne le réglage de la couleur, vous avez besoin d'un StateListDrawable comme décrit ci-dessus. Vous pouvez définir ce paramètre sur votre liste en utilisant l'option android:listSelector en définissant la table de dessin en XML comme suit :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

11voto

A AJOUTER : Réponse de @Christopher ne fonctionne pas sur API 7/8 (selon le commentaire correct de @Jonny) SI vous utilisez des couleurs, au lieu de drawables. (Dans mes tests, l'utilisation de tableaux selon Christopher fonctionne bien).

Voici le CORRECTION pour les versions 2.3 et inférieures lors de l'utilisation des couleurs :

Comme indiqué par @Charles Harley, il existe un bogue dans les versions 2.3 et inférieures où le fait de remplir l'élément de la liste avec une couleur entraîne l'extension de la couleur à l'ensemble de la liste. Sa solution consiste à définir un shape contenant la couleur souhaitée, et de l'utiliser à la place de la couleur.

Je vous suggère de consulter ce lien si vous souhaitez simplement utiliser une couleur comme sélecteur, et si vous visez Android 2 (ou au moins permettre Android 2).

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