2011-12-01 7 views
9

C'è un modo per ereditare da già noto selector s in Android?Selettore ereditario

Vorrei estendere un EditText e aggiunto uno stato personalizzato, fino ad ora ho capito di farlo utilizzando il metodo onCreateDrawableState(). Quando entra in gioco un selettore c'è un modo semplice per usare i selettori predefiniti e basta aggiungere il mio invece di definirli di nuovo?

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

<item android:state_enabled="false" android:drawable="@drawable/login_textfield_bg_error" /> 
<item android:state_window_focused="false" android:drawable="@drawable/login_textfield_bg_error"> 
<item android:state_pressed="true" android:drawable="@drawable/login_textfield_bg_error" /> 
<item android:state_selected="true" android:drawable="@drawable/login_textfield_bg_error" /> 
<item app:errorBackground="@drawable/login_textfield_bg_error" /> 
</selector> 

risposta

4

Potrei essere frainteso ma forse puoi semplicemente delegare loro?

Quindi nel tuo caso è necessario uno stato personalizzato, quindi se si definisce solo i casi in cui si applica il vostro stato personalizzato non si può fare questo:

<selector xmlns:android="..." xmlns:app="..."> 
    <item app:custom_state="true" android:drawable="@drawable/the_one_care_about"/> 
    <item android:drawable="@android:drawable/editbox_background"/> 
</selector> 

Quindi questo afferma in sostanza, per gli stati in cui il mio personalizzati lo stato è vero, mostra il mio sfondo personalizzato ... tuttavia per tutti gli altri stati, si comporta allo stesso modo di questo selettore. Questo selettore si limita ad avere istruzioni per altri stati, quindi seguiteli anche loro. Quindi non c'è ridefinizione e dal momento che gli stati sono valutati in ordine dall'alto al basso, tecnicamente non devi ridefinire nulla, stai solo affermando che vuoi solo definire un sottoinsieme di stati e delegare a quest'altro drawable (che capita a essere un altro selettore) per tutti gli altri contenuti. questo aiuta?