1

我有一些要加载到 a 中的 HTML,WebView我需要自定义 css 样式。当直接从我的颜色资源中设置链接颜色时,我遇到了一些麻烦。在以下示例中,使用了linkColorManual工作,但如果我将其切换为linkColorcss 样式,则会被忽略:

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?

4

2 回答 2

2

找到了解决方案:

通过 检索 Android Color 资源时getResources().getString(),我收到了 8 个字符的十六进制颜色,而不是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);
于 2013-10-04T18:56:19.220 回答
0

你应该把你的颜色放在 strings.xml 中,如下所示:

<string name="Link_Colour">#223344</string>

或者,如果您想坚持使用颜色,请执行此操作

int color = getResource().getColor(R.color.xyz);
String linkColor = "#" + Integer.toHexString(color)
于 2013-10-04T18:51:09.320 回答