Voglio avere 2 temi selezionabili per la mia applicazione. Per fare ciò, ho definito alcuni attributi, come questo:
<attr format="color" name="item_background" />
Quindi, ho creato entrambi i temi, in questo modo:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Questo metodo funziona alla grande, permettendomi di creare e modificare facilmente diversi temi. Il problema è che sembra che possa essere utilizzato solo in Views e non in Drawables .
Ad esempio, fare riferimento a un valore da una vista all'interno di un layout funziona:
<TextView android:background="?item_background" />
Ma fare lo stesso in un Drawable non:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Ottengo questo errore durante l'esecuzione dell'applicazione:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Se invece di ?item_background
utilizzare un colore hardcoded, funziona, ma ciò non mi consente di utilizzare i miei temi. Ho anche provato ?attr:item_background
, ma succede lo stesso.
Come potrei farlo? E perché funziona in Views ma non in Drawables? Non riesco a trovare questa limitazione da nessuna parte nella documentazione ...