Отображение HTML в WebView с помощью специального CSS

Мое приложение использует JSoup для загрузки HTML-страницы страницы сообщений (скажем, в этом случае это страница, содержащая сообщения данного потока). Я бы хотел взять этот HTML-код, вырезать ненужные элементы и применить собственный CSS, чтобы он стал "мобильным" в WebView.

Должен ли я вставлять стили в HTML, когда я его обрабатываю (поскольку я все равно его обрабатываю) или есть хороший способ добавить файл CSS в мои активы приложения и просто обратиться к нему. Я полагаю, что последний был бы идеальным, но не уверен, как это сделать.

Я вижу подсказки в WebView loadDataWithBaseURL, которые вы можете ссылаться на локальные активы, но не знаете, как их использовать.

Ответ 1

Вы можете использовать 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 сможет находить и использовать css файлы из каталога активов.

ps И да, если вы загружаете свою html-форму в папку с ресурсами, вам не нужно указывать базовый url.

Ответ 2

Я предполагаю, что ваш стиль "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/веб-страницы:

    String htmldata = doc.outerHtml();
    
  • показать веб-страницу в веб-просмотре:

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

Ответ 3

вот решение

Поместите свой html и css в папку /assets/folder, затем загрузите файл html следующим образом:

    WebView wv = new WebView(this);

    wv.loadUrl("file:///android_asset/yourHtml.html");

то в вашем html вы можете ссылаться на свой css обычным способом.

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

Ответ 4

Это так просто, как есть:

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" />

Ответ 5

Возможно ли иметь весь контент, отображаемый на странице, в данном div? Тогда вы могли бы reset css на основе идентификатора и работать оттуда.

Скажите, что вы даете свой div id = "ocon"

В вашем css есть определение типа:

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

и вы можете установить значения, чтобы очистить все css от применения к контенту. После этого вы можете просто использовать

#ocon ul{}

или что-то еще, далее в таблице стилей, чтобы применить новые стили к контенту.

Ответ 6

Если у вас есть 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", "");