Cómo recuperar atributos de estilo mediante progtwigción desde styles.xml

Actualmente estoy usando WebView o TextView para mostrar algunos datos dynamics provenientes de un servicio web en una de mis aplicaciones. Si los datos contienen texto puro, usa TextView y aplica un estilo desde styles.xml. Si los datos contienen HTML (principalmente texto e imágenes) usa WebView.

Sin embargo, este WebView no tiene estilo. Por lo tanto, se ve muy diferente de la habitual TextView. He leído que es posible diseñar el texto en una WebView simplemente insertando algo de HTML directamente en los datos. Esto suena bastante fácil, pero me gustaría utilizar los datos de Styles.xml como los valores requeridos en este HTML, así que no necesitaré cambiar los colores, etcétera, en dos ubicaciones si cambio mis estilos.

Entonces, ¿cómo podría hacer esto? He realizado algunas búsquedas exhaustivas, pero no he encontrado la forma de recuperar los diferentes atributos de estilo de su styles.xml. ¿Me estoy perdiendo algo aquí o realmente no es posible recuperar estos valores?

El estilo del que trato de obtener los datos es el siguiente:

 fill_parent wrap_content 14sp #E3691B 5dp 10dp 10dp bold  

Estoy principalmente interesado en textSize y textColor.

Es posible recuperar estilos personalizados de styles.xml progtwigción.

Defina un estilo arbitrario en styles.xml :

  

Ahora, recupera los estilos como este

 // The attributes you want retrieved int[] attrs = {android.R.attr.textColor, android.R.attr.background, android.R.attr.text}; // Parse MyCustomStyle, using Context.obtainStyledAttributes() TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, attrs); // Fetch the text from your style like this. String text = ta.getString(2); // Fetching the colors defined in your style int textColor = ta.getColor(0, Color.BLACK); int backgroundColor = ta.getColor(1, Color.BLACK); // Do some logging to see if we have retrieved correct values Log.i("Retrieved text:", text); Log.i("Retrieved textColor as hex:", Integer.toHexString(textColor)); Log.i("Retrieved background as hex:", Integer.toHexString(backgroundColor)); // OH, and don't forget to recycle the TypedArray ta.recycle() 

La respuesta que @Ole ha dado parece romperse al usar ciertos atributos, como shadowColor, shadowDx, shadowDy, shadowRadius (estos son solo unos pocos que encontré, puede haber más)

No tengo idea de por qué ocurre este problema, lo que estoy preguntando aquí , pero el estilo de encoding @AntoineMarques parece resolver el problema.

Para que esto funcione con cualquier atributo, sería algo como esto


En primer lugar, defina un estilo que contenga los identificadores de recursos como tal

attrs.xml

        

Luego, en el código, harías esto para obtener el texto.

 TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, R.styleable.MyStyle); String text = ta.getString(R.styleable.MyStyle_android_text); 

La ventaja de utilizar este método es que está recuperando el valor por nombre y no por índice.

Si la solución aceptada no funciona, intente cambiar el nombre de attr.xml a attrs.xml (funcionó para mí)