Tôi muốn có 2 chủ đề có thể chọn cho ứng dụng của mình. Để làm điều đó, tôi đã xác định một số thuộc tính, như sau:
<attr format="color" name="item_background" />
Sau đó, tôi tạo cả hai chủ đề, như thế này:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Phương pháp này hoạt động tốt, cho phép tôi tạo và sửa đổi một số chủ đề một cách dễ dàng. Vấn đề là có vẻ như nó chỉ có thể được sử dụng trong Chế độ xem chứ không phải trong Bảng vẽ .
Ví dụ: tham chiếu một giá trị từ Chế độ xem bên trong bố cục hoạt động:
<TextView android:background="?item_background" />
Nhưng làm điều tương tự trong Drawable không:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Tôi gặp lỗi này khi chạy ứng dụng:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Nếu thay vì ?item_background
tôi sử dụng màu mã cứng, nó sẽ hoạt động, nhưng điều đó không cho phép tôi sử dụng các chủ đề của mình. Tôi cũng đã thử ?attr:item_background
, nhưng điều tương tự cũng xảy ra.
Làm thế nào tôi có thể làm điều này? Và tại sao nó hoạt động trong Chế độ xem mà không hoạt động trong Bảng vẽ? Tôi không thể tìm thấy hạn chế này ở bất kỳ đâu trong tài liệu ...