2010-06-04 8 views
7

Ho setacciato l'interwebs e ho trovato molti post su come modificare i colori di una vista elenco usando un selettore di lista. Comunque non sembra funzionare per me. Quindi la mia domanda sarebbe cosa sto sbagliando?Personalizzazione dei colori di ListView per Android?

Quando utilizzo i file di seguito, ottengo un elenco in cui tutti gli sfondi degli articoli sono inizialmente blu. (Mi aspettavo bianco)

Quando sposto la messa a fuoco su e giù il testo si trasforma in un grigio scuro e gli sfondi degli oggetti sono ancora blu. (Questo è quando mi aspetterei che una singola riga sia blu con il resto bianco)

Quando faccio clic su una riga lo sfondo della riga su cui ho fatto clic diventa nero e tutte le altre righe diventano verdi. (Mi aspettavo di avere la fila ho cliccato diventa verde e il resto essere di colore bianco)

Qui è la mia principale file di layout:

<?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> 

Ecco il mio file elemento della lista:

<?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> 

Qui è il file miei colori:

<?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> 

Ecco il mio file di selezione:

<?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> 

Speriamo che sia qualcosa di stupido e semplice che sto sbagliando.

Grazie in anticipo.

+0

sembra che l'intero listView stesso sia focalizzato invece delle singole voci dell'elenco. – YGL

risposta

7

Penso che android: listSelector = "@ drawable/item_selector" sia applicato solo alla radice della vista, non a tutto il suo sottotitolo.

tenta di aggiungere @ drawable/item_selector come un backgroud del vostro RelativeLayout con android:background="@drawable/item_selector" e mettere un layout trasparente per l'listSelector:

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

Questa era la combinazione vincente. Grazie! Ho lottato con questo per un paio di giorni. –

+0

Molto bene grazie :) – ademar111190

1

In realtà, se si vuole farlo programatically senza l'uso di risorse, è puoi impostare il colore dell'elemento. Ad esempio, per impostare il colore del testo # F123456 in un TextView:

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

Questo è utile se si desidera impostare dinamicamente un colore in un elenco che è selezionabile dall'utente, forse memorizzate in un database in cui si usa semplicemente sopraelevazione un file di risorse statiche per elenchi di colori.

Problemi correlati