WebView, добавить локальный файл .CSS на HTML-страницу?
В 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();
Как-то я не получаю стили, применяемые к странице. Является ли это путь местоположения, который я использовал, это неправильно? пожалуйста, помогите мне..
Ответы
Ответ 1
Сева Алексеев прав, вы должны хранить файлы 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. Я пришел к этому решению благодаря Питеру Кнего.
Ответ 2
Вы не можете хранить произвольные файлы в res
- только определенные типы ресурсов (чертежи, макеты и т.д.). CSS должен перейти в папку assets
. Затем вы можете обратиться к нему по следующему URL-адресу: file:///android_asset/MyStyle.css
Ответ 3
В соответствующем примечании, если вы не храните файл в папке с ресурсами и хотите использовать относительные пути, Webview на Android иногда требует точечной косой черты перед относительными путями.
<LINK href="./styles/file.css" type="text/css" rel="stylesheet">
См. этот пост