2009-09-09 16 views
9

Ho un ListView che sto popolando da un numero personalizzato ListAdapter. All'interno dell'adapter (nel metodo getView(int, View, ViewGroup)) sto impostando il colore di sfondo di View utilizzando setBackgroundColor(int). Il problema è che, indipendentemente dal colore in cui viene impostato lo sfondo, viene sempre visualizzato un grigio scuro. Potrebbe anche valere la pena notare che sto usando il tema della Luce.Colori di sfondo ListView Android sempre visualizzati in grigio

rilevanti (semplificato) bit di codice:

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; 
} 

Tutte le idee/suggerimenti?

risposta

22

si dovrebbe usare: setBackgroundResource(R.color.myRow_red) invece di setBackgroundColor(). Nel proprio colore di sfondo di esempio viene assegnato l'ID invece del colore effettivo descritto nelle risorse.

+0

grazie sei un risparmiatore di vita :) – user1940676

+0

Ho una situazione simile ma non posso usare questa soluzione per le forme. Ho posto una domanda più dettagliata qui: http://stackoverflow.com/questions/39820240/android-canvas-drawrect-colour-always-shows-as-grey – Vedant261

6

È necessario impostare l'attributo cacheColorHint sul colore di sfondo desiderato per l'elenco. Questa è una soluzione alternativa per tenere conto dell'ottimizzazione del disegno eseguita da Android sugli elenchi.

vedere qui: link text

+0

Esatto, e se non è necessario modificare dinamicamente il colore di sfondo, è sufficiente aggiungere android: background = "# FF0000" nel file di layout my_row.xml. –

+0

midj: che in realtà non è vero nel mio caso, stai solo vedendo un esempio super-semplificato. –

+0

@ fiXedd: quindi qual è il tuo problema allora? Non è stata disattivata la guida della cache dei colori? – Matthias

0

Il freddo avvolge sempre l'intera riga all'interno di un'altra vista e imposta il colore di sfondo su quella vista. Questa vista sarebbe la prima (e unica) figlia della fila.

0

provare questo:

setBackgroundColor(0xFF5DB9FB); 
0

cercare di fare in questo modo:

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

2

mi sono imbattuto in un problema simile in cui il divisore stava venendo su grigio. Ho trovato che le altre soluzioni non avevano alcun effetto, ma android:divider="<drawable,color, or whatever>" sul mio ListView funzionava.