我有一些HTML正在加载到WebView
中,我需要自定义css样式。当直接从我的Color资源设置链接颜色时,我遇到了一些麻烦。在以下使用linkColorManual
的示例中,如果我将其切换为linkColor
,则忽略了css样式:
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);
这是我color.xml
文件中的相关行:
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
<color name="Link_Colour">#867970</color>
...
</resources>
我宁愿不在我的应用中复制粘贴此十六进制颜色。如果直接从资源加载颜色字符串,为什么它不能应用css?
答案 0 :(得分:1)
找到解决方案:
通过getResources().getString()
检索Android Color资源时,我收到了一个8字符的十六进制颜色 NOT 一个CSS可以解析的6位数颜色。从上面的例子可以看出:
linkColor = #ff867970;
linkColorManual = #867970;
前面的额外两个字符(#ff
)代表Alpha(有关详细信息,请参阅Android Color文档)。为了检索6个字符的CSS可解析颜色,我使用了以下内容:
int linkColorInt = getResources().getColor(R.color.Link_Colour);
String linkColor = "#" + Integer.toHexString(linkColorInt & 0x00FFFFFF);
答案 1 :(得分:0)
你应该把你的颜色放在strings.xml中,如下所示:
<string name="Link_Colour">#223344</string>
或者如果你想坚持使用颜色,请执行此操作
int color = getResource().getColor(R.color.xyz);
String linkColor = "#" + Integer.toHexString(color)