アセットからWebViewページを提供する問題に関するさまざまな議論を見てきましたが、どれも決定的なものではありませんでした。
WebViewを使用して、プロジェクトアセットに保存されているhtml(および含まれているcss)ファイルを表示できるようにしたいと思います。
Wv.loadUrl( "file:///Android_asset/html_no_copy/demo_welcome.html")はそのファイルを表示しますが、demo_welcome.htmlのリンクはローカル(ファイル名の前にURLなし)または絶対-同じloadUrlに供給されたフォーム-動作しません。ビューに「Webページが利用できません」というエラーが表示されます。
WebView wv = (WebView)this.findViewById(R.id.splashWebView);
wv.loadUrl("file:///Android_asset/html_no_copy/test.html"); // Works
または
wv.loadUrl("file:///Android_asset/html_no_copy/demo_welcome.html"); // Works
ただし、demo_welcome.htmlの次のリンクは機能しません。
<a href="test.html">CLICK HERE</a><p>
<a href="file:///Android_asset/html_no_copy/test.html">OR HERE</a>
コンテンツプロバイダーを作成することでこれを回避できることはわかっていますが、それは極端に思えます。
これをSDK 1.6(4)以降で動作させたい。
これをHTMLだけで実行できるかどうか、またはデータを読み込むためにコードを大量に処理する必要があるかどうかは誰にもわかりますか?
まあ、私はそれが再帰するという警告にもかかわらず、(1.6と2.2で)動作するように見える何かを見つけました。
また、1番目と2番目のページ内のcssスタイルシートリンクの両方が、次のインターセプトなしで機能することも発見しました。奇妙なことに、少し緊張します。考え?
コードは次のとおりです。
WebView wv = (WebView)this.findViewById(R.id.splashWebView);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
wv.loadUrl("file:///Android_asset/html_no_copy/demo_welcome.html");
ファイルの内容は次のとおりです。
demo_welcome.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Demo Html</title>
<link rel="stylesheet" type="text/css" href="demo.css" />
</head>
<body>
<H1>Testing One Two Three</H1>
<a href="test.html">CLICK HERE</a><p>
<a href="file:///Android_asset/html_no_copy/test.html">OR HERE</a>
</body>
</html>
test.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="test.css" />
<title>Insert title here</title>
</head>
<body>
<H1>TEST.HTML</H1>
</body>
</html>
loadUrlの代わりに、loadDataWithBaseURLメソッドを使用してみてください。
wv.loadDataWithBaseURL("fake://not/needed", html, mimeType, encoding, "");