2011-12-01 8 views
9

Czy istnieje sposób odziedziczenia po znanych już selector s w systemie Android?Selektor dziedziczy

Chciałbym przedłużyć EditText i dodać stan niestandardowy, jak dotąd zrozumiałem, robiąc to przy użyciu metody onCreateDrawableState(). Kiedy selektor wchodzi w grę, czy istnieje prosty sposób na użycie domyślnych selektorów i po prostu dodajesz moje zamiast ich ponownego definiowania?

<?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> 

Odpowiedz

4

Być może nie rozumiem, ale może po prostu przekazać im je?

Więc w twoim przypadku masz stan niestandardowy, więc jeśli tylko określić przypadki, w których stosuje się twój stan zwyczaj nie można to zrobić:

<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> 

Więc to w zasadzie stanowi dla państw, w których mój niestandardowych stan jest prawdziwy, pokaż moje niestandardowe tło ... jednak w przypadku wszystkich innych stanów zachowuj się tak samo jak ten selektor. Ten selektor po prostu ma instrukcje dla innych stanów, więc też je śledź. Nie ma więc przedefiniowania, a ponieważ stany są oceniane w kolejności od najwyższej do najniższej, technicznie nie musisz niczego przedefiniowywać, tylko stwierdzasz, że chcesz tylko zdefiniować podzbiór stanów i przekazać je do tego innego losowania (co zdarza się być kolejnym selektorem) dla wszystkich innych treści. czy to pomaga?