tôi xác định sau drawable my_background_drawable.xml
:Màu Danh sách nhà nước không được công nhận trong Shape 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>
Và tôi cũng xác định sau màu danh sách nhà nước tài nguyên 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>
Khi tôi đặt cho my_background_drawable
làm nền đối với một số chế độ xem thì tôi không thể quan sát bất kỳ thay đổi nào về màu được xác định trong color_stateful.xml
đối với hình dạng của tôi, trong khi trạng thái chế độ xem thực sự bị thay đổi (selector_png_drawable.xml
là chỉ báo).
Tuy nhiên tất cả mọi thứ chỉ là tốt khi tôi sửa đổi của tôi my_background_drawable.xml
theo cách sau:
<?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>
Vậy là nó đúng là thông tin trạng thái màu sắc chỉ bị mất khi ColorStateList
tài nguyên được sử dụng trong vòng một ShapeDrawable
hoặc tôi đang làm nó sai rồi?
Kể từ Android Lollipop, điều này không còn đúng và 'ColorStateList' được phân tích cú pháp chính xác. – keyboardr
Có thể xác nhận nó hoạt động trong Lollipop - đã thực sự bối rối tại sao thiết bị thử nghiệm <21 của tôi không hoạt động đúng cách! – Tom
Sự thay thế rõ ràng (và khủng khiếp) đối với các thiết bị trước kẹo là tạo ra nhiều '' s vì có các trạng thái, mỗi loại chỉ khác nhau bởi thuộc tính '' 'màu' và thay thế' 'ban đầu một 'StateListDrawable' tham chiếu mỗi' '. Sự tàn bạo của vật có thể được giảm nhẹ bằng cách chỉ sử dụng các tham chiếu tài nguyên bên trong các phần tử '' (không có giá trị mã hóa cứng) và một phần tử có thể có '' ban đầu được giữ trong thư mục 'drawable-v21' (có thể đầy đủ) chuyển sang sau). _blargh_ –
desseim