2013-10-04 28 views
1

我有一些HTML,我正在加載到WebView,我需要自定義CSS樣式。當直接從我的Color資源設置鏈接顏色時,我遇到了一些麻煩。在使用linkColorManual下面的例子中工作,但如果我切換它linkColor CSS樣式被忽略了:如何從資源設置Webview鏈接顏色

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

找到了解決辦法:

當通過getResources().getString()檢索Android Color資源時,我收到了一個8位字符的十六進制顏色NOT一個6位數字的CSS可以p屁股。從以上示例意味着:

linkColor = #ff867970; 
linkColorManual = #867970; 

額外的兩個字符(#ff)在前面代表阿爾法(見Android Color文檔獲取更多信息)。要檢索6個字符CSS解析的顏色代替,我用了以下內容:

int linkColorInt = getResources().getColor(R.color.Link_Colour); 
String linkColor = "#" + Integer.toHexString(linkColorInt & 0x00FFFFFF); 
+0

from#00FF00在我的colors.xml中用你的解決方案定義的只是開始#FF00 – Jorgesys

0

你應該只把你的顏色的strings.xml這樣的:

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

或者,如果你想堅持的色彩搭配,做到這一點

int color = getResource().getColor(R.color.xyz); 
String linkColor = "#" + Integer.toHexString(color) 
+0

雖然這種解決方案的工作,這意味着我會重複我的十六進制顏色 - 已存儲在'color.xml'一個又一個存儲在'strings.xml',因爲我仍然需要在整個應用中訪問其他UI元素的'Link_Colour' Color。 – alexgophermix