2012-09-12 7 views
7

Sto provando ad aggiungere al mio drawable statelist esistente, uno stato disabilitato e semplicemente non funziona.Statelist drawable android: state_enabled non funziona in xml

in origine, ho avuto questo codice:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/store_item_background_selected" android:state_selected="true"/> 
<item android:drawable="@drawable/store_item_background"/> 
</selector> 

e ha funzionato perfettamente per selezionato e non selezionato.

ora ho voluto aggiungere l'androide: state_enabled = "false" come questo:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/store_item_background_selected" android:state_selected="true"/> 
<item android:drawable="@drawable/store_item_background" android:state_enabled="true"/> 
<item android:drawable="@drawable/store_item_background_disabled"/> 
</selector> 

e non è mai passa all'immagine disabilitato.

qualche idea?

EDIT

ho aggiunto setEnabled(false) al costruttore della vista che sto impostando questa statelist drwable e ora vedere l'immagine disabili, ma una volta che ho impostato la vista abilitato, non passerà alla disabile di nuovo .

risposta

7

Prova questa

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@drawable/store_item_background_selected" android:state_enabled="true" android:state_selected="true"/> 
<item android:drawable="@drawable/store_item_background" android:state_enabled="true"/> 
<item android:drawable="@drawable/store_item_background_disabled" android:state_enabled="false"/> 

</selector> 
+0

non ha fatto la differenza. vedi edit – piojo

+0

scusa, errore nel mio codice in cui l'ho impostato su disabilitato. – piojo

+0

risposta sbagliata. Non ha spiegato il lavoro del NOR. – Vucko

15

Anche se questa è una domanda veramente vecchio. On dovrebbe scrivere di conseguenza il selettore.

  1. stato disabilitato prima
  2. stato premuto seconda
  3. stato normale ultima

+0

cambiando l'ordine immediatamente risolto il mio problema. Dove hai trovato questa informazione? –

+0

Alcuni su google quando sono rimasto bloccato per ore in questo stesso problema –

+0

Ho avuto questo problema per molto tempo utilizzando questo approccio: StateListDrawable res = new StateListDrawable(); res.addState (new int [] {- ​​android.R.attr.state_enabled}, nuovo ColorDrawable (colore)); res.addState (nuovo int [] {android.R.attr.state_enabled, android.R.attr.state_pressed}, nuovo ColorDrawable (colore)); res.addState (nuovo int [] {}, nuovo ColorDrawable (colore)); E questo ha funzionato immediatamente. Grazie. Vorrei che fosse documentato da qualche parte ... – ClayHerendeen