実行時に作成したHTMLをWebViewにロードし、assetsディレクトリに配置されたCSSファイルを適用する必要があります。そして、私はすでにwebviewの関数に提供する必要のあるベースURLを持っています。loadDataWithBaseURL
コードスニペット(CSSファイルを適用しない):
StringBuffer buff = new StringBuffer();
buff.append("<head>");
buff.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/my_css_file.css\"/>");
buff.append("</head>");
buff.append("<div class=\"announcement-header\">");
buff.append("HEADER");
buff.append("</div>");
buff.append("<div class=\"announcement-separator\"></div>");
buff.append("<div class=\"announcement\">");
buff.append("CONTENT");
buff.append("</div>")
WebView.loadDataWithBaseURL(MY_BASE_URL, buff.toString(), "text/html", HTTP.UTF_8, null);
私はこれらの2つの同様の問題を見てきた1発行&2号を、私は与えるカントとして私の場合はわずかに異なっているfile:///android_asset/
にベースURLとしてloadDataWithBaseURL
機能。
この場合、CSSファイルをどのように適用できるかについてのアイデアはありますか?
あなたからの要求の一部をインターセプトしたい場合はWebView
、あなたオーバーライドすることによって行うことができますshouldInterceptRequest()
でWebViewClient
、このように:
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
if (URLUtil.isFileUrl(url) && url.contains(".css")) {
return getCssWebResourceResponseFromAsset();
} else {
return super.shouldInterceptRequest(view, url);
}
}
ここにはすでに優れた詳細な回答がありますhttps://stackoverflow.com/a/8274881/1112882
ただし、セキュリティ上の理由から、ベースURLがローカルでない場合、ローカルファイルにアクセスすることはできません。したがって、cssへの相対パスを指定してから、リクエストをインターセプトします。
パターンを使用して、白黒の実際の相対パスとカスタム相対パスを区別することをお勧めします。たとえば、のandroid_asset/my_css_file.css
代わりにmy_css_file.css
を使用し、shouldInterceptRequest()
それに応じて変更して、から始まるリクエストを常にインターセプトしますandroid_asset
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加