zdefiniować następujące rozciągliwej my_background_drawable.xml
:Kolor Lista członkowskie nie rozpoznał w kształcie rozciągliwej
<?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>
I również zdefiniować następujące państwowego koloru liście zasobów 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>
kiedy ustawić dany my_background_drawable
jako tło dla niektórych widoków nie widzę żadnej zmiany koloru zdefiniowanej w color_stateful.xml
dla mojego kształtu, podczas gdy stan widoku jest faktycznie zmieniony (selector_png_drawable.xml
jest wskaźnikiem).
Jednak wszystko jest w porządku, kiedy Zmienić my_background_drawable.xml
w następujący sposób:
<?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>
Więc to prawda, że informacje o stanie kolor jest tylko utracone podczas ColorStateList
zasób jest wykorzystywany w ShapeDrawable
czy to robię źle?
Od Androida Lollipop nie jest to już prawdą, a 'ColorStateList' jest poprawnie przetwarzany. – keyboardr
Potwierdzam, że działa w Lollipop - był naprawdę zdezorientowany, dlaczego moje urządzenie testowe <21 nie działa poprawnie! – Tom
Oczywistą (i przerażającą) alternatywą dla urządzeń pre-Lollipop jest utworzenie wielu '' s, ponieważ są stany, z których każdy różni się jedynie ich '' 'atrybutem' i zastępuje oryginalny '' rysowany przez a 'StateListDrawable' odnoszące się do każdego' '. Okrucieństwo obiektu można nieco złagodzić, wykorzystując jedynie odwołania do zasobów wewnątrz elementów '' (bez wartości zakodowanych na stałe), a także można mieć oryginalny katalog '' przechowywany w katalogu 'drawable-v21' (aby możliwie w pełni przełącz na później). _blargh_ –
desseim