Saya ingin memiliki 2 tema yang dapat dipilih untuk aplikasi saya. Untuk melakukan itu, saya mendefinisikan beberapa atribut, seperti ini:
<attr format="color" name="item_background" />
Kemudian, saya membuat kedua tema tersebut, seperti ini:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Metode ini berfungsi dengan baik, memungkinkan saya membuat dan memodifikasi beberapa tema dengan mudah. Masalahnya adalah sepertinya itu hanya bisa digunakan di Views, dan bukan di Drawables .
Misalnya, mereferensikan nilai dari View di dalam layout berfungsi:
<TextView android:background="?item_background" />
Tetapi melakukan hal yang sama di Drawable tidak:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Saya mendapatkan kesalahan ini saat menjalankan aplikasi:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Jika alih-alih ?item_background
saya menggunakan warna hardcode, itu berfungsi, tetapi itu tidak memungkinkan saya untuk menggunakan tema saya. Saya juga mencoba ?attr:item_background
, tetapi hal yang sama terjadi.
Bagaimana saya bisa melakukan ini? Dan mengapa ini berfungsi di Views, tetapi tidak di Drawables? Saya tidak dapat menemukan batasan ini di mana pun dalam dokumentasi ...