web-dev-qa-db-fra.com

Android Couleur du sélecteur ListView

Bonjour à tous

J'ai 2 questions concernant un ListView dans Android:

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

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

Merci!

73
WhiteTigerK

Le sélecteur de liste pouvant être dessiné est un StateListDrawable - il contient une référence à plusieurs tirables pour chaque état pouvant être sélectionné, focalisé, appuyé, désactivé ...

Bien que vous puissiez récupérer le dessin en utilisant getSelector(), je ne pense pas que vous puissiez récupérer un Drawable spécifique à partir d'un StateListDrawable, et il ne semble pas non plus possible de récupérer la couleur par programme. directement à partir d'un ColorDrawable de toute façon.

En ce qui concerne la définition de la couleur, vous avez besoin de StateListDrawable comme décrit ci-dessus. Vous pouvez définir ceci sur votre liste en utilisant le Android:listSelector attribut, définissant le dessin en XML comme ceci:

<?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>
89
Christopher Orr

POUR AJOUTER: La réponse de @ Christopher ne fonctionne pas sur l'API 7/8 (selon le commentaire correct de @ Jonny) SI vous utilisez des couleurs au lieu de fonctions dessinables. (Dans mes tests, en utilisant des drawables selon Christopher fonctionne très bien)

Voici le FIX pour 2.3 et inférieur lors de l'utilisation de couleurs:

Selon @Charles Harley, il existe un bogue dans 2.3 et ci-dessous dans lequel le fait de remplir l'élément de liste avec une couleur provoque la couleur qui en sort sur toute la liste. Son correctif est de définir un shape dessinable contenant la couleur souhaitée et de l'utiliser à la place de la couleur.

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

11