Mi definisco seguente drawable my_background_drawable.xml
:colori Lista Stato non riconosciuto in forma Drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/color_stateful" />
</shape>
</item>
<item android:drawable="@drawable/selector_png_drawable" />
</layer-list>
E ho anche definisco seguente colore elenco dello stato delle risorse color_stateful.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="#FF00ff00"/>
<item android:color="#FFff0000"/>
</selector>
quando ho impostato dato my_background_drawable
come sfondo per alcuni punti di vista quindi non posso osservare alcun cambiamento di colore definito in color_stateful.xml
per la mia forma, mentre lo stato della vista è effettivamente cambiato (selector_png_drawable.xml
è un indicatore).
Comunque tutto è bene quando modifico la mia my_background_drawable.xml
nel seguente modo:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- This doesn't work
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/color_stateful" />
</shape>
</item>
-->
<item>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="#FF00ff00" />
</shape>
</item>
<item>
<shape android:gravity="center"
android:shape="rectangle">
<solid android:color="#FFff0000" />
</shape>
</item>
</selector>
</item>
<item android:drawable="@drawable/selector_png_drawable"" />
</layer-list>
Quindi è vero che le informazioni sullo stato di colore è appena perso quando ColorStateList
risorsa è utilizzata all'interno di un ShapeDrawable
o sto facendo sbagliato?
A partire da Android Lollipop, questo non è più true e 'ColorStateList' viene analizzato correttamente. – keyboardr
Posso confermare che funziona in Lollipop - ero davvero confuso perché il mio dispositivo di test <21 non funzionava correttamente! – Tom
L'ovvia (e orrenda) alternativa per i dispositivi pre-lecca-lecca è creare tanti ' come ci sono stati, ognuno solo differendo dal loro' '' color' attributo, e sostituire l'originale '' da un 'StateListDrawable' che fa riferimento a ciascun' '. L'atrocità della cosa può essere leggermente mitigata usando solo i riferimenti alle risorse all'interno degli elementi '' '(nessun valore hardcoded), e si può anche avere l'originale '' tenuto nella directory 'drawable-v21' (eventualmente completamente passare a più tardi). _blargh_ –
desseim