2014-06-10 3 views
0

J'ai examiné de nombreuses questions SO et ne peut pas comprendre cela. J'ai réussi à utiliser un sélecteur pour changer la couleur hilighting de ma ListView, mais comment définir la couleur d'arrière-plan normale (non pressée)?Android ListView couleur de fond de ligne

Le code XML ci-dessous ne fonctionne pas car il ne fait que modifier l'arrière-plan de l'élément de ligne en noir une fois que l'élément a été enfoncé. Comment devrais-je faire ça?

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 
    <item android:state_focused="true" android:drawable="@color/row_hilight"/> 
    <item android:state_pressed="true" android:drawable="@color/row_hilight"/> 
    <item android:state_pressed="false" android:drawable="@color/black"/> 
</selector> 

Répondre

1

Vous devez avoir un état par défaut qui n'a pas d'état.

De même, vous devez supprimer android:state_pressed="false", car il a la même fonctionnalité avec l'état par défaut.

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 
    <item android:state_focused="true" android:drawable="@color/row_hilight"/> 
    <item android:state_pressed="true" android:drawable="@color/row_hilight"/> 
    <item android:state_pressed="false" android:drawable="@color/black"/> //delete this 
    <item android:drawable="@color/black"/> //add this 
</selector> 
+0

Vraiment? Je pensais que j'avais essayé de le faire et il a fait la même chose que la ligne "supprimer ce". Je vais essayer encore une fois quand je rentre à la maison. Merci. – SparkyNZ

+0

@SparkyNZ okie, met à jour avec vos résultats –

+0

Salut Rod. J'ai peur que ça fasse toujours la même chose. Ma ListView contient des lignes qui sont en fait blanches sur ma tablette Android, mais après avoir touché les lignes, elles deviennent noires. Si je touche une autre ligne, la ligne redevient blanche et la ligne nouvellement touchée devient noire - donc elle montre l'état "sélectionné" plutôt que l'état de ligne par défaut si vous suivez. – SparkyNZ

1

Il suffit d'ajouter un élément de plus à la fin:

<item android:drawable="@color/default_color"/> 

De la documentation state list drawables:

Au cours de chaque changement d'état, la liste d'état est traversé de haut en bas et le premier élément qui correspond à l'état actuel est utilisé-la sélection n'est pas basée sur le «meilleur résultat», mais simplement le premier élément tha t répond aux critères minimum de l'état.

Par conséquent, avoir un élément sans critère spécifique correspondra si aucun des autres ne le fait.

+0

Merci, mais @ couleur/résultats couleur_defaut en une erreur dans le XML. @ color/transparent (défini comme # 00000000 dans mon fichier colors.xml) semble retourner la ligne à sa couleur de fond précédente. – SparkyNZ

+0

Ahem, la couleur par défaut était juste un exemple. Vous étiez censé mettre votre propre couleur là-dedans! : - | – matiash

+0

OK :-) Je ne savais pas si default_color signifiait 'utiliser la couleur par défaut du système' ou autre chose. Merci pour l'aide. – SparkyNZ

0

faire un listview personnalisé avec un adaptateur personnalisé:

Custom Adapter for List View

ce fut vous pouvez utiliser une vue avec l'arrière-plan que vous voulez dans getView