WebView, добавить локальный файл .CSS на страницу HTML? - PullRequest
37 голосов
/ 28 сентября 2011

В Android я использую WebView для отображения части веб-страницы, которую я получил из Интернета, используя HttpClient из Apache. Чтобы получить только ту часть, которую я хочу из 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

Теперь я могу просто загрузить tables.toString() в WebView, и он отобразится. Теперь я хочу связать CSS-файл, который я храню в своей папке ресурсов с этой страницей. Я знаю, что могу иметь что-то вроде

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

В моем html, но как мне связать его, чтобы он использовал тот, который я хранил локально?

--- EDIT ---
Я теперь изменился на это:

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

Почему-то я не получаю стили, примененные к странице. Это неверный путь к локации? пожалуйста, помогите мне ..

Ответы [ 3 ]

71 голосов
/ 12 октября 2011

Сева Алексеев прав, вы должны хранить CSS-файлы в папке assets, но ссылка на file:///android_asset/filename.css URL не работает для меня.

Существует другое решение: поместить CSS в папку assets, выполнить манипуляции с HTML, но ссылаться на CSS по относительному пути и загрузить HTML в WebView с помощью loadDataWithBaseURL() метод:

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

P.S. Я пришел к этому решению благодаря ответу Питера Кнего .

7 голосов
/ 28 сентября 2011

Вы не можете хранить произвольные файлы в res - только конкретные типы ресурсов (чертежи, макеты и т. Д.). Вместо этого CSS должен перейти в папку assets. Тогда вы можете обратиться к нему по следующему URL: file:///android_asset/MyStyle.css

0 голосов
/ 18 апреля 2014

В связанной заметке, если вы не храните файл в папке ресурсов и хотите использовать относительные пути, Webview на Android иногда требует косой черты перед относительными путями.

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

См. этот пост

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...