Leggere alcune domande correlate qui in SO, oltre a esaminare i documenti e l'origine di Android per cercare di capirlo, ma sono perplesso, sebbene considerato che il listSelector sembra applicarsi solo stili sugli elementi selezionati, non sto scioccato ...Elenco elenco di ListView Android non mostra lo sfondo degli articoli predefinito
ho un Listview definito main.xml qui:
<?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>
il listSelector riferimento è qui (preso in prestito in gran parte dal elenco stato Android predefinito trovato nell'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>
I drawable fa riferimento sono le forme, rettangoli arrotondati, in questo modo:
<?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>
Quindi, il risultato finale dovrebbe essere un ListView con oggetti con uno sfondo @ drawable/shape_row per impostazione predefinita, e quindi diverso sfondi colorati a seconda dello stato. Quando apro il mio elenco, tutto funziona bene in termini di quando gli stati sono attivi, come ad esempio un elemento ottiene lo stato attivo, viene pressato, ecc, ma le voci si sono uno sfondo trasparente quando nessuno vengono selezionati (vale a dire lo stato di visualizzazione di default). Avevo sperato che l'ultima regola della lista Stato,
<item android:drawable="@drawable/shape_row" />
catturerebbe quello stato, ma per qualche motivo non funziona. Ho spostato le cose e provato diverse impostazioni e niente. Se modifico il file row.xml che io uso per definire le voci di elenco nella ListView e tenta di aggiungere un Android specifica: sfondo che punta a @ drawable/shape_row, ogni riga diventa lo sfondo corretto, ma il premuto, il fuoco, stati ecc. non riescono a elaborare (o almeno, non possono essere visti come lo sfondo non cambia mai).
Qualcuno mi può puntare nella giusta direzione qui? Sono così vicino a mettere questo a letto, ma dopo aver provato quasi tutto, non riesco a ottenere gli elementi ListView di prendere uno sfondo di default e rispondere alla lista di Stato concessi tramite Android: listSelector.
Grazie,
Paul
EDIT:
anche solo provato ad aggiungere Android: itemBackground = "@ drawable/shape_row" al ListView in main.xml, e non sorprende senza fortuna (la documentazione stato dovrebbe essere usato per specificare gli sfondi delle voci di menu, ma pensavo che valesse la pena provare con gli elementi della lista).
Un'altra cosa provato, aggiungendo android: visibile = "true" per ciascuna delle definizioni selettori e voce. I documenti StateListDrawable sembrano indicare che il "Provides initial visibility state of the drawable; the default value is false", ma aggiungendo questo non ha cambiato nulla.
EDIT2: Quindi, in base alla ricerca effettuata di seguito da Qberticus, sembra che possa esistere un solo set di selettori di elenchi per visualizzazione, che conferma il comportamento del selettore di elenchi. Posso anche confermare che l'impostazione del android: drawSelectorOnTop fa spostare il selettore di fronte alla voce selezionata, ma questo naturalmente oscura l'elemento stesso in modo tale che vedo solo il selettore in sé (che nel mio caso è una forma di colore).
Ecco cosa la lista sembra con sfondi impostare:
A causa del fondo set, non v'è alcun cambiamento di aspetto quando si selezionano gli elementi. Se cambio l'androide: direttiva drawSelectorOnTop alla vera e selezionare un elemento, ottengo:
E, infine, se ho impostato un'immagine senza sfondo per le voci di elenco, il selettore funziona come previsto, ma naturalmente , non ci sono immagini di sfondo come l'ultima regola del StateSelector non sembra essere seguito (non dovrebbe agire come un ripostiglio?) per gli oggetti non selezionati che significa non bello personalizzato forme arrotondate:
Quindi, il mio problema rimane; se non si imposta uno sfondo per ogni elemento della lista, posso vedere il selettore funzionante, MA gli articoli non hanno lo sfondo quando non è selezionato. Se imposto uno sfondo per l'elemento, sono fantastici quando non sono selezionati, ma lo sfondo oscura il selettore. Semplicemente non è possibile avere un elemento di elenco dalla forma unica con selettori funzionanti?
Grazie per chiunque altro che può pesare in.
Sfortunatamente, sto ancora riscontrando problemi nella personalizzazione della visualizzazione elenco. Ho postato i miei problemi specifici qui: http://stackoverflow.com/questions/5426385/listview-with-nine-patch-item-background-issues; Gradirei qualsiasi input tu possa avere. – LostNomad311
Inoltre, imposta l'attributo list "cacheColorHint" al tuo colore bg. In caso contrario, un rapido scorrimento sull'elenco potrebbe generare un elenco di elementi neri. – larham1