2010-06-04 4 views
7

J'ai parcouru les interwebs et trouvé de nombreux messages sur la façon de changer les couleurs d'une vue de liste en utilisant un sélecteur de liste. Cependant, cela ne semble pas fonctionner pour moi. Donc, ma question serait ce que je fais mal? Lorsque j'utilise les fichiers ci-dessous, j'obtiens une liste où tous les arrière-plans de l'article sont initialement bleus. (Je m'attendais à un blanc)Personnalisation des couleurs ListView Android?

Lorsque je déplace la mise au point de haut en bas, le texte devient gris foncé et les arrière-plans sont toujours bleus. (C'est quand je m'attendrais à ce qu'une seule ligne soit bleue avec le reste blanc)

Lorsque je clique sur une rangée, l'arrière-plan de la rangée sur laquelle j'ai cliqué devient noir et toutes les autres lignes sont devenues vertes. (Je devrait avoir la ligne que je cliqué devient vert et le reste est blanc)

Voici mon fichier de mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:listSelector="@drawable/item_selector" 
    /> 
<TextView 
    android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/empty" 
    /> 
</LinearLayout> 

Voici mon fichier élément de la liste:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:padding="10sp"> 
    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     /> 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:singleLine="true" 
     android:textStyle="bold" 
     android:padding="7dip" 
     android:textSize="18sp" 
     android:layout_toRightOf="@id/checkbox" 
     /> 
</RelativeLayout> 

ici est mes couleurs fichier:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="red">#ff00</color> 
    <color name="green">#f0f0</color> 
    <color name="blue">#f00f</color> 
    <color name="white">#ffff</color> 
</resources> 

Voici mon fichier de sélection:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true" 
     android:drawable="@color/green" /> 
    <item 
     android:state_focused="true" 
     android:drawable="@color/blue" /> 
    <item 
     android:drawable="@color/white" /> 
</selector> 

Espérons que c'est quelque chose de stupide et simple que je fais mal.

Merci d'avance.

+0

il semble que toute la liste elle-même est en train d'être mise au point à la place des éléments individuels de la liste. – YGL

Répondre

7

Je pense que android: listSelector = "@ drawable/item_selector" est appliqué uniquement sur la racine de la vue pas du tout son sous-enfant.

Essayez d'ajouter @ drawable/item_selector comme backgroud de votre RelativeLayout avec android:background="@drawable/item_selector" et mettre une disposition transparente au listSelector:

android:listSelector="@android:color/transparent" 
+0

C'était la combinaison gagnante. Je vous remercie! J'ai eu des problèmes avec ça pendant quelques jours maintenant. –

+0

Très bien merci :) – ademar111190

1

En fait, si vous voulez le faire programatically sans l'utilisation des ressources, vous peut définir la couleur de votre élément. Par exemple, pour définir la couleur du texte # F123456 dans un TextView:

objTextView.setTextColor(color.parseColor("#F12345")); 

Ceci est pratique si vous souhaitez définir dynamiquement une couleur dans une vue de liste qui est sélectionnable par l'utilisateur, peut-être stocké dans une base de données où vous utilisez sont tout simplement pas un fichier de ressources statiques pour les listes de couleurs.