ฉันต้องการมี 2 ธีมที่เลือกได้สำหรับแอปพลิเคชันของฉัน ในการทำเช่นนั้นฉันได้กำหนดคุณลักษณะบางอย่างดังนี้:
<attr format="color" name="item_background" />
จากนั้นฉันสร้างทั้งสองธีมดังนี้:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
วิธีนี้ใช้ได้ผลดีทำให้ฉันสร้างและปรับเปลี่ยนธีมต่างๆได้อย่างง่ายดาย ปัญหาคือว่าดูเหมือนว่ามันสามารถนำมาใช้เฉพาะในการเข้าชมและไม่อยู่ใน Drawables
ตัวอย่างเช่นการอ้างอิงค่าจากมุมมองภายในเค้าโครงใช้งานได้:
<TextView android:background="?item_background" />
แต่การทำเช่นเดียวกันใน Drawable ไม่ได้:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
ฉันได้รับข้อผิดพลาดนี้เมื่อเรียกใช้แอปพลิเคชัน:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
ถ้า?item_background
ฉันใช้สีฮาร์ดโค้ดแทนมันก็ใช้ได้ แต่ไม่อนุญาตให้ฉันใช้ธีมของฉัน ฉันก็พยายาม?attr:item_background
เหมือนกัน แต่สิ่งเดียวกันก็เกิดขึ้น
ฉันจะทำสิ่งนี้ได้อย่างไร? และเหตุใดจึงทำงานใน Views แต่ใช้ไม่ได้ใน Drawables ฉันไม่พบข้อ จำกัด นี้ในเอกสาร ...