[android] WebViewからローカル画像を参照する

Standard

これも大人の事象がないと使わなそうだけど。
プログラム内でhtml文字列を生成して、WebView#loadData(html, “text/html”, “UTF-8″) とかやりたいときに、

String html = "<!DOCTYPE html><html><head><title>Sample</title></head><body>" +
"<img src\"PATH_TO_LOCAL_IMAGE\"></body></html>";

って感じでimgタグのsrcにAPP_ROOT/res/drawable/ 配下の画像を使いたいとかそんな。APP_ROOT/assets/ 配下にhtmlファイルを作ってやれば普通に相対パスでAPP_ROOT/assets/img/ 以下を参照できるんだけど、そうもいかないとき。(html文字列内のjavascriptの中に端末情報を埋め込まないといけないとか)
 
 
解決策はWebView#loadDataWithBaseURLの第一引数に参照したいディレクトリのURIを指定する。です。APP_ROOT/res/drawable/unbaba.pngって画像を指定するとしたらこう。

String html = "<!DOCTYPE html><html><head><title>Sample</title></head><body>" +
"<img src\"unbaba.png\"></body></html>";
webView.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html", "UTF-8", null);

 
ドキュメントをちゃんと読みましょうっていうお話。
 
 
参考:http://remotedroid.net/blog/2011/01/14/referencing-drawables-in-html-in-androids-webview/