Reputation: 4279
I have some HTML that I'm loading into a WebView
and I need to customize the css styles. When it came to setting the link color directly from my Color resource I had some trouble. In the following example using linkColorManual
worked but if I switched it to linkColor
the css style was ignored:
String mime = "text/html";
String encoding = "utf-8";
String linkColor = getResources().getString(R.color.Link_Colour);
String linkColorManual = "#867970";
String html = "<!DOCTYPE HTML>\n<html>\n<head>\n<style>\n"
+ "body, html { font-family: 'sans-serif'; font-size:14px; color:#8B8D90;}\n"
+ "a {color:"+linkColorManual+";}\n"
+ "</style>\n</head>\n<body>" + post.getPostData().toString() + "</body>\n</html>";
WebView myWebView = (WebView) findViewById(R.id.post_content);
myWebView.loadDataWithBaseURL(post.getPostURL().toString(), html, mime, encoding, null);
This is the relevant line from my color.xml
file:
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
<color name="Link_Colour">#867970</color>
...
</resources>
I'd rather not copy paste this hex color throughout my app. Why does it fail to apply the css if I load the color string directly from the resource?
Upvotes: 1
Views: 2362
Reputation: 1593
You should just put your color in strings.xml like this:
<string name="Link_Colour">#223344</string>
Or if you want to stick with color, do this
int color = getResource().getColor(R.color.xyz);
String linkColor = "#" + Integer.toHexString(color)
Upvotes: 0
Reputation: 4279
Found the solution:
When retrieving an Android Color resource via getResources().getString()
, I received an 8 character hex color NOT a 6 digit one that CSS can parse. From the example above this meant:
linkColor = #ff867970;
linkColorManual = #867970;
The extra two characters (#ff
) at the front represent the Alpha (see Android Color docs for more info). To retrieve the 6 character CSS parsable color instead, I used the following:
int linkColorInt = getResources().getColor(R.color.Link_Colour);
String linkColor = "#" + Integer.toHexString(linkColorInt & 0x00FFFFFF);
Upvotes: 2