Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to retrieve style attributes programmatically from styles.xml

Currently I'm using either a WebView or a TextView to show some dynamic data coming from a webservice in one of my apps. If the data contains pure text, it uses the TextView and applies a style from styles.xml. If the data contains HTML (mostly text and images) it uses the WebView.

However, this WebView is unstyled. Therefor it looks a lot different from the usual TextView. I've read that it's possible to style the text in a WebView simply by inserting some HTML directly into the data. This sounds easy enough, but I would like to use the data from my Styles.xml as the values required in this HTML so I won't need to change the colors et cetera on two locations if I change my styles.

So, how would I be able to do this? I've done some extensive searching but I have found no way of actually retrieving the different style attributes from your styles.xml. Am I missing something here or is it really not possible to retrieve these values?

The style I'm trying to get the data from is the following:

<style name="font4">     <item name="android:layout_width">fill_parent</item>     <item name="android:layout_height">wrap_content</item>     <item name="android:textSize">14sp</item>     <item name="android:textColor">#E3691B</item>     <item name="android:paddingLeft">5dp</item>     <item name="android:paddingRight">10dp</item>     <item name="android:layout_marginTop">10dp</item>     <item name="android:textStyle">bold</item> </style> 

I'm mainly interested in the textSize and textColor.

like image 885
Sander van't Veer Avatar asked Dec 05 '12 08:12

Sander van't Veer


1 Answers

It is possible to retrieve custom styles from styles.xml programmatically.

Define some arbitrary style in styles.xml:

<style name="MyCustomStyle">     <item name="android:textColor">#efefef</item>     <item name="android:background">#ffffff</item>     <item name="android:text">This is my text</item> </style> 

Now, retrieve the styles like this

// 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() 
like image 133
Ole Avatar answered Oct 14 '22 07:10

Ole