web-dev-qa-db-ja.com

WebView、HTMLページにローカル.CSSファイルを追加しますか?

Android私は、WebViewを使用して、ApacheのHttpClientを使用してインターネットから取得したWebページの一部を表示しています。

_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
_

これで、WebViewでloadtables.toString()を実行するだけで表示されます。ここで、アセットフォルダー内に保存するCSSファイルをこのページにリンクします。私は次のようなものを持つことができることを知っています

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

私のhtmlでは、どうやってリンクすればローカルに保存したものを使うのでしょうか?

---編集---
これに変更しました:

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

どういうわけか、ページにスタイルが適用されません。私が使用したロケーションパスは間違っていますか?私を助けてください ..

37
user717572

Seva Alekseyevは正しいです。CSSファイルをassetsフォルダーに保存する必要がありますが、_file:///Android_asset/filename.css_ URLで参照しても機能しません。

別の解決策があります:CSSをassetsフォルダに入れ、HTMLで操作を行いますが、相対パスでCSSを参照し、ロードします loadDataWithBaseURL() メソッドによるHTMLからWebViewへ:

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

追伸 Peter Knegoの答え のおかげで、この解決策にたどり着きました。

71
Sergey Glotov

任意のファイルをresに保存することはできません-特定のリソースタイプ(ドローアブル、レイアウトなど)のみを保存できます。 CSSは、代わりにassetsフォルダーに移動する必要があります。その後、次のURLで参照できます:file:///Android_asset/MyStyle.css

7
Seva Alekseyev