He leído varias preguntas relacionadas aquí en SO, además de consultar los documentos de Android y la fuente para tratar de resolver esto, pero estoy perplejo, aunque dado que el listSelector parece sólo para aplicar estilos en artículos seleccionados, no estoy en shock ...Android ListView Lista de estados que no muestra el fondo del elemento predeterminado
he definido en una Listview main.xml aquí:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadingEdgeLength="5dp"
android:divider="#000000"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:singleLine="false"
android:text="@string/message_list_empty" />
</FrameLayout>
el listSelector hace referencia es aquí (prestado en gran medida de la Lista de estado de Android predeterminada que se encuentra en el SDK: /android/platforms/android-8/data/res/drawable/list_selector_background.xml):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- the window has lost focus, disable the items -->
<item
android:state_window_focused="false"
android:drawable="@drawable/shape_row_disabled" />
<!-- the list items are disabled -->
<item
android:state_enabled="false"
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/shape_row_disabled" />
<item
android:state_enabled="false"
android:state_focused="true"
android:drawable="@drawable/shape_row_disabled" />
<item
android:state_enabled="false"
android:drawable="@drawable/shape_row_disabled" />
<!-- the list items are enabled and being pressed -->
<item
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/shape_row_transition" />
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/shape_row_transition" />
<!-- the list items are enabled and being used -->
<item
android:state_focused="true"
android:drawable="@drawable/shape_row_selected" />
<!-- the default item -->
<item
android:drawable="@drawable/shape_row" />
</selector>
Los dibujables hace referencia son formas, rectángulos redondeados, así:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#EF6100"
android:centerColor="#FF8E00"
android:endColor="#EF6100"
android:angle="270" />
<corners
android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
Por lo tanto, el resultado final debe ser un ListView con elementos con un fondo @ estirable/shape_row por defecto, y luego diferentes fondos de colores dependiendo del estado. Cuando enciendo mi lista, todo funciona bien en términos de cuándo los estados están activos, como un elemento obtiene el foco, se presiona, etc., pero los elementos tienen un fondo transparente cuando no se selecciona ninguno (es decir, el estado de vista predeterminado). Tenía la esperanza de que la última regla de la Lista de Estado,
<item android:drawable="@drawable/shape_row" />
capturaría ese estado, pero por alguna razón no funciona. He cambiado las cosas y he probado diferentes configuraciones, y nada. Si edito el archivo row.xml que utilizo para definir los elementos de la lista en ListView y trato de agregar un android específico: fondo que apunta a @ drawable/shape_row, cada fila obtiene el fondo correcto, PERO al presionar, al enfocar, etc. los estados no se procesan (o al menos no se pueden ver porque el fondo nunca cambia).
¿Puede alguien señalarme en la dirección correcta aquí? Estoy tan cerca de poner esto en la cama, pero después de probar casi todo, simplemente no puedo hacer que los elementos de ListView tomen un fondo predeterminado Y respondo a la Lista de estado implementada a través de android: listSelector.
Gracias,
Paul
EDIT:
también acaba de intentar añadir android: itemBackground = "@ estirable/shape_row" al ListView en main.xml, y como era de esperar sin suerte (los documentos indica que debería usarse para especificar los fondos de los elementos del menú, pero pensó que valía la pena tomar una foto con los elementos de la lista).
Otra cosa probé, agregando android: visible = "true" a cada una de las definiciones del selector y del elemento. Los documentos StateListDrawable parecen indicar que "Provides initial visibility state of the drawable; the default value is false", pero agregar esto no cambió nada.
EDIT2: De acuerdo con la investigación realizada a continuación por Qberticus, parece que solo puede haber un conjunto de selectores de listas por vista, lo que confirma el comportamiento del selector de listas. También puedo confirmar que al configurar el android: drawSelectorOnTop mueve el selector EN FRENTE del elemento seleccionado, pero esto, por supuesto, oscurece el elemento de manera que solo veo el selector en sí (que en mi caso es una forma de color).
Esto es lo que la lista parece que con fondos conjunto:
Debido a los antecedentes conjunto, no hay ningún cambio en su apariencia cuando se seleccionan los elementos. Si cambio el androide: Directiva drawSelectorOnTop true y seleccionar un elemento, me sale:
Y, por último, si fijo imagen sin fondo de los elementos de la lista, el selector funciona como se espera, pero por supuesto , no hay imágenes de fondo como la última regla de la StateSelector no parece ser seguido (¿no debería actuar como un cajón de sastre?) para los elementos no seleccionados es decir, no agradable costumbre formas redondeadas:
Entonces, mi problema permanece; si no configuro un fondo para cada elemento de la lista, puedo ver que el selector funciona, PERO los elementos no tienen fondo cuando no están seleccionados. Si configuro un fondo para el artículo, se ven geniales cuando no están seleccionados, pero el fondo oscurece el selector. ¿Simplemente no es posible tener un elemento de lista de forma única con selectores de trabajo?
Gracias por cualquier otra persona que puede pesar en
.
Lamentablemente, sigo teniendo problemas para personalizar mi vista de lista. Publiqué mis problemas específicos aquí: http://stackoverflow.com/questions/5426385/listview-with-nine-patch-item-background-issues; Agradecería cualquier aporte que pueda tener. – LostNomad311
Además, establezca el atributo de lista "cacheColorHint" en su color bg. De lo contrario, un deslizamiento rápido a través de su lista puede dar como resultado una lista de elementos negros. – larham1