2010-01-10 20 views
71

Hola a todos,Android ListView Selector de color

tengo 2 preguntas con respecto a un ListView en Android:

  1. ¿Cómo puedo obtener el color de la fila centrado de la vista de lista? Traté de usar el método ListView.getSelector(), que según su documentación debería darme lo que estoy buscando, pero me está dando un objeto Drawable del que no sé cómo recuperar el color (si es posible...).

  2. ¿Cómo puedo establecer el color de la fila de la lista de la vista? Aquí traté de usar el método setSelector() en la vista de lista, pasándole un objeto ColorDrawable, pero el resultado de hacerlo es que todo el fondo de la vista de lista está pintado en ese color ... y esto no es lo que quería, por supuesto ...

Gracias!

+0

Esto puede ayudar (hay una pregunta y una solución): http://stackoverflow.com/questions/2065430/fixed-android-detect-focus-pressed-color –

+0

Parece que hay un error en Android 2 que causa el color que afecta a todo el fondo: verifique mi respuesta a los enlaces a una solución provista en otra pregunta. –

Respuesta

88

El dibujable selector de lista es un StateListDrawable — contiene referencia a múltiples dibujables para cada estado de la lista puede ser, como seleccionado, centrado, presionado, discapacitados ...

Si bien se puede recuperar el dibujable usando getSelector(), No creo que pueda recuperar un Drawable específico de StateListDrawable, ni tampoco parece posible recuperar el color directamente desde un ColorDrawable mediante programación.

En cuanto a la configuración del color, necesita un StateListDrawable como se describió anteriormente. Puede configurar esto en su lista usando el atributo android:listSelector, definiendo el dibujable en XML como esto:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" android:state_focused="true" 
     android:drawable="@drawable/item_disabled" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/item_pressed" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/item_focused" /> 
</selector> 
+12

También me gustaría mover la asignación del selector de lista a un tema personalizado, por lo que todas las listas en su aplicación se verían igual @ drawable/my_list_highlight

+0

¿Cómo puedo usar estos códigos para una pulsación larga? ¿evento? –

+0

@Alex: ¿puedes mostrar cómo puedo hacer eso? – eugene

11

agregar: @Christopher's answer no funciona en API 7/8 (según el comentario @ correcta de Jonny) si está usando colores, en lugar de dibujables. (En mis pruebas, utilizando dibujables según Christopher funciona bien)

Aquí es el FIX 2.3 y por debajo al utilizar colores:

Según @Charles Harley, hay un error en 2.3 y más abajo donde llenar el elemento de la lista con un color hace que el color fluya sobre toda la lista. Su solución es definir un dibujable shape que contenga el color que desee, y usar eso en lugar del color.

Sugiero mirar este enlace si solo quiere usar un color como selector, y están apuntando a Android 2 (o al menos permitir para Android 2).

+2

Esto me mordió de nuevo ahora, gracias por recordarme cuál es el verdadero problema. –

Cuestiones relacionadas