Est-il possible d'appliquer un arrière-plan personnalisé à chaque élément Listview via le sélecteur de liste?
Le sélecteur par défaut spécifie @android:color/transparent
le state_focused="false"
cas, mais le fait de le remplacer par un dessin personnalisé n'affecte pas les éléments non sélectionnés. Romain Guy semble suggérer dans cette réponse que cela est possible.
J'obtiens actuellement le même effet en utilisant un arrière-plan personnalisé sur chaque vue et en le cachant lorsque l'élément est sélectionné / focalisé / quoi que ce soit pour que le sélecteur soit affiché, mais il serait plus élégant de tout définir au même endroit.
Pour référence, c'est le sélecteur que j'utilise pour essayer de faire fonctionner cela:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false"
android:drawable="@drawable/list_item_gradient" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="true"
android:drawable="@drawable/list_selector_background_focus" />
</selector>
Et voici comment je règle le sélecteur:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector_background" />
Merci d'avance pour votre aide!
La solution de dglmtn ne fonctionne pas lorsque vous avez un 9 patch dessiné avec un remplissage en arrière-plan. Des choses étranges se produisent, je ne veux même pas en parler, si vous avez un tel problème, vous les connaissez.
Maintenant, si vous voulez avoir une liste avec différents états et 9 patchables (cela fonctionnerait avec tous les drawables et couleurs, je pense), vous devez faire 2 choses:
Ce que vous devez faire est d'abord de définir le row_selector.xml:
N'oubliez pas le
android:state_selected
. Cela fonctionne commeandroid:state_focused
pour la liste, mais il est appliqué pour l'élément de liste.Appliquez maintenant le sélecteur aux éléments (row.xml):
Créez un sélecteur transparent pour la liste:
Cela devrait faire la chose.
la source
N'utilisez jamais de "couleur d'arrière-plan" pour vos lignes de vue de liste ...
cela bloquera chaque action du sélecteur (c'était mon problème!)
bonne chance!
la source
setBackgroundColor
avec une "couleur". Soupir ... UtilisezsetBackground
ousetBackgroundDrawable
selon votre version d'API avec un sélecteur.L'article "Pourquoi ma liste est-elle noire? Une optimisation Android" dans le blog des développeurs Android explique en détail pourquoi l'arrière-plan de la liste devient noir lors du défilement. Réponse simple: définissez cacheColorHint sur votre liste sur transparent (# 00000000).
la source
C'est suffisant, si vous mettez
list_row_layout.xml
:listitem_selector.xml:
la source
au lieu de:
écrire
la source
Vous pouvez écrire un thème:
theme.xml
styles.xml
my_selector est votre choix personnalisé pour le sélecteur Je suis désolé je ne sais pas comment écrire mon code
la source
Je ne sais pas comment obtenir l'effet souhaité via le sélecteur lui-même - après tout, par définition, il existe un sélecteur pour toute la liste.
Cependant, vous pouvez contrôler les changements de sélection et dessiner ce que vous voulez. Dans cet exemple de projet , je rend le sélecteur transparent et dessine une barre sur l'élément sélectionné.
la source
<item android:state_focused="false" android:drawable="@android:color/transparent" />
clause dans le sélecteur par défaut.J'utilise toujours la même méthode et ça marche à chaque fois, partout: j'utilise simplement un sélecteur comme celui-ci
et définissez sur ListView (CECI EST TRÈS IMPORTANT POUR LE FAIRE FONCTIONNER) l'attribut
pour le textColor il suffit de mettre dans le dossier de couleur (IMPORTANT, pas de dossier dessinable!) un sélecteur comme celui-ci
ceci un exemple de modèle de ligne
tout fonctionne sans solutions fastidieuses. espère cette aide
la source
L'équipe FrostWire ici.
Toutes les API de merde de sélecteur ne fonctionnent pas comme prévu. Après avoir essayé toutes les solutions présentées dans ce fil de discussion, nous venons de résoudre le problème au moment de gonfler l'élément ListView.
Assurez-vous que votre élément conserve son état, nous l'avons fait en tant que variable membre du MenuItem (booléen sélectionné)
Lorsque vous gonflez, demandez si l'élément sous-jacent est sélectionné, si c'est le cas, définissez simplement la ressource dessinable que vous voulez comme arrière-plan (que ce soit un 9patch ou autre). Assurez-vous que votre adaptateur en est conscient et qu'il appelle notifyDataChanged () lorsqu'un élément a été sélectionné.
Ce serait vraiment bien si les sélecteurs fonctionnaient réellement, en théorie, c'est une solution agréable et élégante, mais il semble qu'elle soit cassée. BAISER.
la source