アプリ内のHTMLファイルをWebViewで表示する

本ではWebViewについてほとんど触れてませんが、Google Maps JavaScript API V3を使うコラムで、WebViewを使うと書いてあります。

本文ではサーバを用意してそこから読み出すように書いていますが、サーバを用意するのは面倒なので、リソースとしてHTMLファイルや画像ファイルを用意して読み出したいと思うのは当然でしょう。

そういう場合は、WebViewクラスのloadUrlメソッドにURLとして “file:///android_asset/filename.html” の様に指定することでプロジェクトの中でassetsという名前のフォルダのファイルを参照することができます。

フォルダ名がassetsで参照がandroid_assetとsが無いのは、多分間違いが残ってしまったのでしょう、名前が異なるのが正しいので注意が必要です。

さて、問題はこのassetsフォルダーでは言語などを勝手には識別してくれないことです。

Android 2.2(API Level 8)以上であれば、file:///android_res/raw/filename.htmlという参照が可能で、/res/raw/フォルダなどにHTMLファイルを置くことで、言語やその他のリソース切り替え機構が動きます。

API Level5くらいから使えるのであれば、1.6以下を無視するという手がありますが、さすがにLevel7以下を無視するとXperiaまでが対象外になってしまいます。

そこで、先ほどのassetsフォルダを使う為にプログラム側で言語を切り替えて対応することを考えます。

日本語かどうかでページを分けたい場合、以下のようにすればよい様です。(HT-03A,IS01では旨く動きました)

WebView wv = (WebView)findViewById(R.id.webview);
if(Locale.getDefault().equals(Locale.JAPAN)){
wv.loadUrl(“file:///android_asset/ja-index.html”);
}else{
wv.loadUrl(“file:///android_asset/index.html”);
}
それぞれのファイルではリンク先はそれぞれの言語に応じたファイルにリンクすることになります。
HTMLファイルの中での参照ではすべてフラットな同じディレクトリ内に存在するので、ファイル名だけで参照可能です。逆に通常のページの様にディレクトリで階層を作ることはできません。