Estoy tratando de establecer propiedades de estilo obtenidas de mi tema en el código.
Mi razón es que quiero utilizar un estilo de mi propio tema, PERO mi diseño de interfaz de usuario se genera completamente en código (usando un generador de diseño personalizado), sin definir ningún widgets en XML. Así que no puedo establecer un estilo en el diseño XML de mi widget; no hay ningún diseño XML.
Estoy pensando que voy a ser capaz de establecer este estilo en el código de mi aparato mediante el uso de
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
Aquí parece (a mí) que
AttributeSet set = null;
porque esto es lo que el inflador XML habría proporcionado.
int[] attrs = R.styleable.MyWidget;
define qué atributos quiero ver.
int defStyleAttr = myWidgetStyle;
que es una referencia, definida en mi tema, a un estilo para MyWidget. Ambos están definidos en archivos XML en res/values. "myWidgetStyle" sigue el patrón de nombre que los desarrolladores de Android han usado en su código.
defStyleRes = 0;
Espero que no tenga que pensar en esto.
luego a que cualquier propiedad, tales como color de fondo,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
Esto parece funcionar -tan lejos de todos modos.
Parece que el sistema de compilación de Android genera convenientemente el índice correcto para usar en a.getColor y lo nombra R.styleable.MyWidget_background
. No hice este nombre, por lo que Android debe haberlo hecho usando mi XML para mi estilo MyWidget.
Supongo que se puede buscar el índice correcto buscando en el TypedArray el atributo requerido, pero eso sería ineficiente y el TypedArray parece un desagradable artilugio. ¡Usaría un palo muy largo para empujarlo!
Don