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

我的应用程序使用JSoup来下载留言板页面的HTML(假设在这种情况下,它是包含给定线程的post的页面)。 我想采取这种HTML,去除不需要的项目,并应用自定义CSS来风格它是在WebView中的“移动”。

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

我在WebView的loadDataWithBaseURL中看到提示,可以引用本地资源,但不知道如何使用它。

你可以使用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); 

只有在这之后,WebView才能够从assets目录中find并使用css文件。

ps而且,是的,如果你加载你的HTML文件forms的资产文件夹,你不需要指定一个基地址。

我假设你的样式表“style.css”已经位于资产文件夹中

  1. 用jsoup加载网页:

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

     // remove links to external style-sheets doc.head().getElementsByTag("link").remove(); 
  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"); 
  4. 从jsoup-doc / web-page创buildstring:

     String htmldata = doc.outerHtml(); 
  5. 在webview中显示网页:

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

这里是解决scheme

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

  WebView wv = new WebView(this); wv.loadUrl("file:///android_asset/yourHtml.html"); 

然后在你的HTML你可以参考你的CSS通常的方式

 <link rel="stylesheet" type="text/css" href="main.css" /> 

这是如此简单:

 WebView webview = (WebView) findViewById(R.id.webview); webview.loadUrl("file:///android_asset/some.html"); 

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

 <link rel="stylesheet" type="text/css" href="style.css" /> 

是否有可能在页面中呈现所有内容,在给定的分区? 然后,您可以重置基于ID的CSS,并从那里工作。

说你给你的div id =“ocon”

在你的CSS,有一个像这样的定义:

 #ocon *{background:none;padding:0;etc,etc,} 

你可以设置值来清除所有的CSS应用到内容。 之后,你可以使用

 #ocon ul{} 

或者其他什么,在样式表的后面,将新样式应用于内容。

如果你有你的CSS在内部文件存储,你可以使用

 //Get a reference to your webview WebView web = (WebView)findViewById(R.id.webby); // Prepare some html, it is formated with css loaded from the file style.css String webContent = "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><link rel=\"stylesheet\" href=\"style.css\"></head>" + "<body><div class=\"running\">I am a text rendered with INDIGO</div></body></html>"; //get and format the path pointing to the internal storage String internalFilePath = "file://" + getFilesDir().getAbsolutePath() + "/"; //load the html with the baseURL, all files relative to the baseURL will be found web.loadDataWithBaseURL(internalFilePath, webContent, "text/html", "UTF-8", "");