Quero ter 2 temas selecionáveis para meu aplicativo. Para fazer isso, defini alguns atributos, como este:
<attr format="color" name="item_background" />
Então, criei os dois temas, assim:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Este método funciona muito bem, permitindo-me criar e modificar vários temas facilmente. O problema é que parece que só pode ser usado em Views, e não em Drawables .
Por exemplo, fazer referência a um valor de uma Visualização dentro de um layout funciona:
<TextView android:background="?item_background" />
Mas fazer o mesmo em um Drawable não:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Recebo este erro ao executar o aplicativo:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Se em vez de ?item_background
usar uma cor codificada, funciona, mas isso não me permite usar meus temas. Eu também tentei ?attr:item_background
, mas acontece o mesmo.
Como posso fazer isso? E por que funciona em visualizações, mas não em Drawables? Não consigo encontrar essa limitação em nenhum lugar da documentação ...