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

问题描述 投票:0回答:4

在 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 中,但如何链接它以便它使用我本地存储的那个?

---编辑---
我现在改成了这样:

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();

不知何故,我没有将样式应用到页面。难道是我使用的位置路径错误?

android html css resources httpclient
4个回答
76
投票

Seva Alekseyev 是对的,您应该将 CSS 文件存储在

assets
文件夹中,但通过
file:///android_asset/filename.css
URL 引用对我来说不起作用。

还有另一种解决方案:将CSS放在

assets
文件夹中,用HTML进行操作,但是通过相对路径引用CSS,并通过
loadDataWithBaseURL()
方法将HTML加载到WebView:

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

例如你有

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);

附注感谢 Peter Knego 的回答,我找到了这个解决方案。


7
投票

您不能在

res
中存储任意文件 - 只能存储特定的资源类型(可绘制对象、布局等)。 CSS 应移至
assets
文件夹。然后你可以通过以下网址参考:
file:///android_asset/MyStyle.css


0
投票

有几个步骤:Android Studio

1- 确保将 HTML 和 CSS 文件复制到 Asset 文件夹中

2- 添加 html 文件的链接,如下所示:

<link type="text/css" rel="stylesheet" href="file:///android_asset/myStyle.css">

3- 像平常一样管理 CSS 文件 桌子 { 边界崩溃:崩溃; 宽度:100%; }

    th, td {
        text-align: right;
        padding: 8px;
        font-family: "my_font";
    }

    tr:nth-child(even) {
        background-color: #BCA37F;

    }
    tr:nth-child(odd) {
        background-color: #EAD7BB;

    }

4- 甚至可以为每个 html 文件设置字体 :

 <style>
        @font-face {font-family: 'my_font';src: url('file:///android_asset/nazanin.ttf');}


    </style>

5- 最后,对于 Webview 只需使用

webview.loadUrl

wvInfo.loadUrl("file:///android_asset/htmlFile.html")

-1
投票

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

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

参见这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.