WebView,将本地.CSS文件添加到HTML页面?

时间:2011-09-28 14:56:31

标签: android html css resources httpclient

在android中,我正在使用WebView显示我使用Apache的HttpClient从互联网上获取的网页的一部分。为了只从html获得我想要的部分,我使用Jsoup。

String htmlString = EntityUtils.toString(entity4); // full html as a string                                 
Document htmlDoc = Jsoup.parse(htmlString); // .. as a Jsoup Document
Elements tables = htmlDoc.getElementsByTag("table"); //important part

现在我可以在WebView中加载tables.toString()并显示它。现在我想将我存储在我的资产文件夹中的CSS文件链接到此页面。我知道我可以拥有像

这样的东西
<LINK href="styles/file.css" type="text/css" rel="stylesheet">   

在我的HTML中,但如何链接它以便它使用我本地存储的那个?

--- --- EDIT
我现在改为:

StringBuilder sb = new StringBuilder();
    sb.append("<HTML><HEAD><LINK href=\"file:///android_asset/htmlstyles_default.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
    sb.append(tables.toString());
    sb.append("</body></HTML>");
    return sb.toString();

不知何故,我没有将样式应用于页面。是我使用的位置路径是错的吗?请帮帮我..

3 个答案:

答案 0 :(得分:71)

Seva Alekseyev是对的,您应该将CSS文件存储在assets文件夹中,但引用file:///android_asset/filename.css网址对我不起作用。

还有另一种解决方案:将CSS放在assets文件夹中,使用HTML进行操作,但通过相对路径引用CSS ,并通过loadDataWithBaseURL()将HTML加载到WebView方法:

webView.loadDataWithBaseURL("file:///android_asset/", htmlString, "text/html", "utf-8", null);

E.g。你有styles.css文件,把它放到assets文件夹,创建HTML并加载它:

StringBuilder sb = new StringBuilder();
sb.append("<HTML><HEAD><LINK href=\"styles.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
sb.append(tables.toString());
sb.append("</body></HTML>");
webView.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html", "utf-8", null);

P.S。由于Peter Knego's answer,我来到这个解决方案。

答案 1 :(得分:7)

您无法在res中存储任意文件 - 只能存储特定的资源类型(drawable,layouts等)。 CSS应该转到assets文件夹。然后,您可以通过以下网址引用它:file:///android_asset/MyStyle.css

答案 2 :(得分:-1)

在相关的说明中,如果您将文件存储在assets文件夹中并想要使用相对路径,则Android上的Webview有时需要在相对路径之前使用点斜杠。

<LINK href="./styles/file.css" type="text/css" rel="stylesheet">

请参阅this post