動的HTML生成を表示後、外部を表示するWebView

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;
   }
}