WebView で、動的HTML生成させて表示するページを起点にする場合、
動的と言ってもCSSや、画像リソースを asset フォルダに置く場合は、
空のHTML読込みを要求して WebViewClient の onPageStarted で、URL をチェックすることで
動的HTML生成させて表示する。
ただし、Android 4.0 では、loadDataWithBaseURL に渡す baseURL は、CSSや、画像リソースとの
解決させるパスの書き方が、Android 2.3.3 とは異なる。
また、Android 4.0 では、履歴で戻ってきた場合のことを考慮する必要がある
→→実際のコード以下を見る。。
HTMLを作成する任意のクラス PageBuilder を用意しておく。
create()メソッドで、HTMLソース文字列を返すという仕様で、WebView の loadDataWithBaseURL に
渡す目的である。
final String baseUrl = "file:///android_asset/startblank.html";
WebView の初期表示は、、、
if (android.os.Build.VERSION.SDK_INT > 10){
// Android 3.x~
PageBuilder builder = new PageBuilder(getAssets());
webView.loadDataWithBaseURL("file:///android_asset/",builder.create(),"text/html","UTF-8",baseUrl);
}else{
// ブランクを読み込ませて、onPageStarted で、file:///android_asset/index.html を読み込ませる
webView.loadDataWithBaseURL(baseUrl,"","text/html","UTF-8",baseUrl);
}
WebViewClient の onPageStarted 記述で、、
@Override
public void onPageStarted(WebView view,String url,Bitmap favicon){
if (url.equals(baseUrl)){
// 空HTML が要求された時、、、
// HTMLを作成する任意のクラスで 履歴で戻ってきた場合は、ビルダで生成したHTMLを表示
PageBuilder builder = new PageBuilder(getAssets());
if (android.os.Build.VERSION.SDK_INT > 10){
// Android 3.x~
webView.loadDataWithBaseURL("file:///android_asset/",pageBuilder.create(),"text/html","UTF-8",baseUrl);
}else{
webView.loadDataWithBaseURL(baseUrl,pageBuilder.create(),"text/html","UTF-8",baseUrl);
}
return;
}
}