使用自定义CSS在WebView中呈现HTML

the*_*e19 79 html css android webview

我的应用程序正在使用JSoup下载留言板页面的HTML(假设在这种情况下它是一个包含给定线程的帖子的页面).我想使用这个HTML,删除不需要的项目,并应用自定义CSS将其设置为在WebView中"移动".

我应该在处理HTML时将样式注入到HTML中(因为我还是会处理它),或者有一种很好的方法可以将CSS文件添加到我的应用程序的资源中并简单地引用它.我认为后者是理想的,但不确定如何去做.

我在WebView的loadDataWithBaseURL中看到了一些提示,你可以引用本地资产,但不知道如何利用它.

and*_*rii 120

您可以使用WebView.loadDataWithBaseURL

htmlData = "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />" + htmlData;
// lets assume we have /assets/style.css file
webView.loadDataWithBaseURL("file:///android_asset/", htmlData, "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)

只有在此之后,WebView才能够从资产目录中查找和使用css文件.

ps并且,是的,如果您从assets文件夹加载html文件,则无需指定基本URL.

  • 谢谢!这正是我所需要的.(顺便说一下,你可以在内联HTML中使用单引号而不是双引号;这样你就不需要反斜杠了.对我来说总是看起来有点整洁......) (10认同)
  • 尼斯.我会把PS作为直接答案:如果你用WebView.loadUrl加载你的html文件("file:///android_asset/fname.html"); 你可以简单地在其中使用相对网址. (2认同)
  • 如果样式表在文件存储中,我们如何使用loadDataWithBaseURL()?我们可以使用'data/data/etc /"吗? (2认同)
  • 如果您的文件是原始文件夹而不是资产([which](http://stackoverflow.com/a/43663133/3918479) 为您提供 Android 本地化),则基本 URL 将是“file:///android_res/raw /" (2认同)

小智 35

我假设您的样式表"style.css"已经位于assets-folder中

  1. 使用jsoup加载网页:

    doc = Jsoup.connect("http://....").get();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除外部样式表的链接:

    // remove links to external style-sheets
    doc.head().getElementsByTag("link").remove();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 设置本地样式表的链接:

    // set link to local stylesheet
    // <link rel="stylesheet" type="text/css" href="style.css" />
    doc.head().appendElement("link").attr("rel", "stylesheet").attr("type", "text/css").attr("href", "style.css");
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从jsoup-doc/web-page制作字符串:

    String htmldata = doc.outerHtml();
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在webview中显示网页:

    WebView webview = new WebView(this);
    setContentView(webview);
    webview.loadDataWithBaseURL("file:///android_asset/.", htmlData, "text/html", "UTF-8", null);
    
    Run Code Online (Sandbox Code Playgroud)


lon*_*dsi 21

这是解决方案

将你的html和css放在你的/ assets /文件夹中,然后像这样加载html文件:

    WebView wv = new WebView(this);

    wv.loadUrl("file:///android_asset/yourHtml.html");
Run Code Online (Sandbox Code Playgroud)

然后在你的HTML中你可以用通常的方式引用你的CSS

<link rel="stylesheet" type="text/css" href="main.css" />
Run Code Online (Sandbox Code Playgroud)


ego*_*911 9

它很简单:

WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_asset/some.html");
Run Code Online (Sandbox Code Playgroud)

你的some.html需要包含以下内容:

<link rel="stylesheet" type="text/css" href="style.css" />
Run Code Online (Sandbox Code Playgroud)