2010-06-04 20 views
7

He recorrido los interwebs y encontré muchas publicaciones sobre cómo cambiar los colores de una vista de lista usando un selector de lista. Sin embargo, no parece funcionar para mí. Entonces mi pregunta sería ¿qué estoy haciendo mal?Personalizar Android ListView Colors?

Cuando uso los archivos a continuación, obtengo una lista donde todos los fondos de los artículos son inicialmente azules. (Esperaba que fuera blanco)

Cuando muevo el foco hacia arriba y hacia abajo, el texto cambia a gris oscuro y los fondos de los elementos siguen siendo azules. (Esto es cuando esperaría que una sola fila fuera azul con el resto blanco)

Cuando hago clic en una fila, el fondo de la fila en la que hice clic se vuelve negro y las demás filas en verde. (I espera que tenga la fila hice clic a verde y el resto será blanco)

Aquí es mi principal archivo de diseño:

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

Aquí está mi archivo de lista de elementos:

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

Aquí es el archivo de mis colores:

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

Aquí está mi archivo de selección:

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

Afortunadamente es algo tonto y simple que estoy haciendo mal.

Gracias de antemano.

+0

Parece que toda la lista se enfoca en lugar de los elementos de la lista individual. – YGL

Respuesta

7

Creo que android: listSelector = "@ drawable/item_selector" se aplica solo en la raíz de la vista, en absoluto su subhombre.

tratar de añadir @ estirable/item_selector como un fondo de color de su RelativeLayout con android:background="@drawable/item_selector" y puso un diseño transparente para el listSelector:

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

Esa fue la combinación ganadora. ¡Gracias! He estado luchando con esto por un par de días. –

+0

Muy bien gracias :) – ademar111190

1

En realidad, si desea hacerlo mediante programación sin el uso de los recursos, se puede establecer el color de su elemento. Por ejemplo, para establecer el color del texto # F123456 en un TextView:

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

Esto es útil si desea configurar dinámicamente un color en una vista de lista que es seleccionable por el usuario, tal vez almacenada en una base de datos en el que utiliza simplemente no puede un archivo de recursos estático para listas de colores.