2009-09-09 9 views
9

J'ai un ListView que je remplis à partir d'un ListAdapter personnalisé. Dans l'adaptateur (dans la méthode getView(int, View, ViewGroup)), je définis la couleur d'arrière-plan du View en utilisant setBackgroundColor(int). Le problème est que peu importe la couleur que je définis l'arrière-plan, il sort toujours un gris foncé. Il peut également être intéressant de noter que j'utilise le thème Lumière.Android ListView couleurs d'arrière-plan toujours en gris

Bits importants (simplifié) de code:

AndroidManifest.xml:

<activity 
    android:name=".MyActivity" 
    android:theme="@android:style/Theme.Light" /> 

MyAdapter.java:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    View av = inflater.inflate(R.layout.my_row, parent, false); 
    av.setBackgroundColor(R.color.myRow_red); 
    mName = (TextView) av.findViewById(R.id.myRow_name); 
    mName.setText("This is a name"); 
    return av; 
} 

Toutes les idées/suggestions?

Répondre

22

Vous devez utiliser: setBackgroundResource(R.color.myRow_red) au lieu de setBackgroundColor(). Dans votre exemple, la couleur d'arrière-plan est affectée de l'ID au lieu de la couleur réelle décrite dans les ressources.

+0

merci vous êtes un épargnant de vie :) – user1940676

+0

J'ai une situation similaire mais je ne peux pas utiliser cette solution pour les formes. J'ai posé une question plus détaillée ici: http://stackoverflow.com/questions/39820240/android-canvas-drawrect-colour-always-shows-as-grey – Vedant261

6

Vous devez définir l'attribut cacheColorHint sur la couleur d'arrière-plan souhaitée pour votre liste. Ceci est une solution de contournement requise pour prendre en compte une optimisation de dessin effectuée par Android sur les listes.

Voir ici: link text

+0

C'est vrai, et si vous n'avez pas besoin de changer dynamiquement la couleur de votre arrière-plan, vous pouvez juste ajouter android: background = "# FF0000" dans votre fichier layout my_row.xml. –

+0

midj: ce n'est pas vrai dans mon cas, vous voyez juste un exemple super-simplifié. –

+0

@fiXedd: alors quel est votre problème? Vous n'avez pas désactivé l'aide du cache de couleur? – Matthias

0

Vous avez toujours enveloppé la ligne entière dans une autre vue et défini la couleur d'arrière-plan sur cette vue. Cette vue serait le premier (et unique) enfant de la rangée.

0

essayez ceci:

setBackgroundColor(0xFF5DB9FB); 
0

Essayez de faire comme ceci:

av.setBackgroundColor(getResources().getColor(R.color.myRow_red));

2

Je suis tombé sur un problème similaire où le diviseur était à venir gris. J'ai trouvé que les autres solutions n'avaient aucun effet, mais android:divider="<drawable,color, or whatever>" sur mon ListView travaillé.

Questions connexes