Я хочу мати 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>
Цей метод чудово працює, що дозволяє мені легко створювати та модифікувати кілька тем. Проблема полягає в тому, що, здається, його можна використовувати лише в представленнях, а не в малюнках .
Наприклад, посилання на значення з подання всередині макета працює:
<TextView android:background="?item_background" />
Але робити те ж саме в Dravable не означає:
<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
, але трапляється те саме.
Як я міг це зробити? І чому це працює у поданнях, а не у малюнках? Я не можу знайти це обмеження ніде в документації ...