2013-08-22 16 views
11

Sto provando a impostare alcuni stati selettivi personalizzati per ogni elemento nel mio listview. Ho provato la seguente"Selettore personalizzato per lo sfondo dell'elenco

list_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
      android:drawable="@drawable/row_selected_background" /> 
    <item android:state_activated="true" 
      android:drawable="@drawable/row_selected_background" /> 
    <item android:state_focused="true" 
      android:drawable="@drawable/row_selected_background" /> 
    <item android:drawable="@drawable/row_background" /> 
</selector> 

list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <ListView 
      android:id="@android:id/list" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/row_background" 
      android:listSelector="@drawable/list_selector"> 

    </ListView> 
</RelativeLayout> 

Per qualche ragione, il colore non selezionato lista di fondo è come viene definito. Ma l'on premuto/il clic è sempre l'holo blu di Android predefinito per un elenco. Cosa sto facendo di sbagliato?

risposta

19

Usa android:state_pressed per specificare gli stati pressati.


Drawable da usare: /res/drawable/bg.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@android:color/holo_red_dark"/> 
</shape> 

Selettore da usare: /res/drawable/item.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/bg"/> 
</selector> 

ListView:

<ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:saveEnabled="true" 
    android:listSelector="@drawable/item" 
    /> 

Risultato premendo un elemento della lista:

enter image description here

Nota: Selettore elenco viene disegnata dietro Articolo View, punto di vista può avere un proprio sfondo.

+0

questo non ha avuto effetto –

+0

@JohnBaum aggiornato. –

1

Passaggio 1:

primo set la row_selector.xml

Fase 2: applicare il selettore per gli elementi come

android:background="@drawable/row_selector" 

Fase 3: Fai un selettore per la lista, list_selector.xml con tutti gli stati trasparenti per sbarazzarsi degli stati predefiniti.

Fase 4: applicare il selettore nella listview come

android:listSelector="@drawable/list_selector"

+0

scusa questo è solo un errore di battitura –

+0

vedere il mio post modificato –

+0

come faccio a impostare tutti gli stati in modo trasparente? –

Problemi correlati