2012-12-26 18 views
32

ho un tasto e voglio che abbia sfondo diverso quando ho impostato:Stato drawable e stato disabilitato

android:enabled="false" 

Ecco file di risorse per lo sfondo:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false" 
      android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed --> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/bttn_orange_selected" /> <!-- focused --> 
    <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/> 
    <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/> 
</selector> 

Ma pulsante è ancora normale sfondo quando è disabilitato. Cosa mi manca?

+2

tenta di aggiungere al primo Android sezione voce: state_enabled = "true" –

+0

premuto falso non viene premuto . inoltre, non specificare uno stato non significa neanche falso. significa che non è considerato. quindi, la tua regola qui indica ogni volta che non viene premuto un pulsante, ha la normale bg. – njzk2

+0

È necessario eliminare ** android: state_enabled = "true" ** dell'ultimo elemento, in questo modo tutti gli altri stati avranno il ** @ drawable/bttn_orange_normal **. Una volta che il tuo pulsante è stato disattivato, otterrà ** @ drawable/bttn_grey_disabled ** nel posto giusto. Inoltre devi rimuovere la linea che ha il ** android: state_pressed = "false" ** perché sovrascriverà la definizione di *** android: state_enabled = "false" *** – alexscmar

risposta

97

Put questa linea: <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/> come primo elemento (deve essere il primo elemento, altrimenti non funzionerà) del tag selector.

finale:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/> 
      <item android:state_pressed="false" 
       android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed --> 
      <item android:state_pressed="true" 
       android:drawable="@drawable/bttn_orange_selected" /> <!-- focused --> 
      <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/> <!-- idle state --> 
</selector> 
+14

Perché questo ?? Stupida regola stupida:/ – Estel

+1

perché funziona ???? grazie comunque – Orr

+1

cos'è questo? per quale motivo .. comunque funziona per me .. –

16

risposta di Vincent Ducastel è corretto, tuttavia non descrive perché la soluzione funziona.

Quando Android attraversa l'elenco di elementi disponibili, attraversa l'elenco dall'alto verso il basso, valutando in ogni caso se lo stato corrente della vista corrisponde agli stati definiti per ciascun elemento. Quindi, seleziona il primo elemento che corrisponde alle condizioni e ignora il resto.

Ecco perché è sempre necessario fornire un elemento predefinito in fondo all'elenco e fornisce anche un mezzo per visualizzare condizioni di selezione complesse. Per esempio, se si voleva avere uno speciale stato premuto quando l'articolo è disattivato, si dovrebbe definire i seguenti elementi:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    ... 
    <item android:state_enabled="false" android:state_pressed="false" android:drawable="@drawable/btn_grey_disabled"/> 
    <item android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/btn_white_disabled_selected"/> 
    ... 
</selector> 
Problemi correlati