WebView, add local .CSS file to an HTML page?

android, css, html, httpclient, resources

Solution

Seva Alekseyev is right, you should store CSS files in `assets` folder, but referring by `file:///android_asset/filename.css` URL doesn't working for me.

There is another solution: put CSS in `assets` folder, do your manipulation with HTML, but refer to CSS by relative path, and load HTML to WebView by `loadDataWithBaseURL()` method:

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

E.g. you have `styles.css` file, put it to `assets` folder, create HTML and load it:

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. I've come to this solution thanks to Peter Knego's answer.

Problem

In android I'm using WebView to display a part of a webpage which I fetched from the internet using HttpClient from Apache. To only have the part I want from the html, I use 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 ``` Now I can just load `tables.toString()` in the WebView and it displays. Now I want to link a CSS file which I store inside my assets folder with this page. I know I can have something like ``` <LINK href="styles/file.css" type="text/css" rel="stylesheet"> ``` In my html, but how do I link it so that it uses the one I've stored locally? ---EDIT--- I've now changed to this: ``` 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(); ``` Somehow I do not get the styles applied to the page. Is it the location path I used that is wrong?

Original source