Io stesso sto cercando di impostare le proprietà di stile ottenuti dal mio tema nel codice.
La ragione è che voglio utilizzare uno stile dal mio tema, MA il mio layout dell'interfaccia utente è interamente generato nel codice (utilizzando un builder di layout personalizzato), senza definire alcun widget in XML. Quindi non posso impostare uno stile nel layout XML del mio widget: non esiste alcun layout XML.
Sto pensando che sarò in grado di impostare questo stile nel codice del mio widget di utilizzando
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
Qui sembra (a me) che
AttributeSet set = null;
perché questo è cosa avrebbe fornito l'inflater XML.
int[] attrs = R.styleable.MyWidget;
definisce quali attributi che voglio guardare.
int defStyleAttr = myWidgetStyle;
che è un riferimento, definito nel mio tema, a uno stile per MyWidget. Questi sono entrambi definiti nei file XML in res/values. “myWidgetStyle” segue lo schema del nome degli sviluppatori di Android hanno usato nel loro codice.
defStyleRes = 0;
Spero di non dover pensare a questo.
Quindi per ottenere qualsiasi proprietà, come ad esempio un colore di sfondo,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
Questo sembra funzionare -così lontano comunque.
Sembra che il sistema di generazione di Android genera convenientemente l'indice corretto da utilizzare in a.getColor e lo nomina R.styleable.MyWidget_background
. Non ho fatto questo nome, quindi Android deve averlo fatto usando il mio XML per il mio MyWidget stilizzato.
Mi aspetto che si può cercare l'indice corretto cercando il TypedArray per l'attributo richiesto, ma che sarebbe inefficiente e il TypedArray sembra un aggeggio sgradevole da affrontare. Vorrei usare un bastone molto lungo per batterlo!
Don