使用自定义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”已经位于资产文件夹中
-
用jsoup加载网页:
doc = Jsoup.connect("http://....").get();
-
删除外部样式表的链接:
// remove links to external style-sheets doc.head().getElementsByTag("link").remove();
-
设置链接到本地样式表:
// 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");
-
从jsoup-doc / web-page创buildstring:
String htmldata = doc.outerHtml();
-
在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", "");