Webページの進捗状況の取得
進捗状況がわからないと
フリーズしたと思われる
進捗状況の取得には
WebChromeClientクラスの
onProgressChangedハンドラを使う
このメソッドをoverrideすることで進捗状況を取得できる
Webview..setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(Webview view, int newProgress){ super.onProgressChanged(view, newProgress); //行う処理 } });
onProgressChanged()の引数は
WebView viewが
WebChromeClient()をセットしているWebView
int newProgressがWebページの進捗状況を表す0~100の数値
これは、パーセンテージを意味する
これで、進捗状況が取得できたので
画面に表示する
表示方法は2種類あり
進捗バーを使うか
進捗インジケータ、これは回転するアイコン
を使うことになる
まず、進捗バーの場合
この場合、レイアウトファイルに
ProgressBarを追加する
[/java]
次に表示する進捗インジケータの準備
進捗インジケータの表示には
ActivityクラスのsetProgressBardeterminateVisibility()を使う
このメソッドを使うには
Activityクラスの
setContentView()を使う前に
ActivityクラスのrequestWindowFeature()を使う必要がある
もし、それより後に実行すると
RuntimeException requestFeature() must be called before adding content
という例外が発生する
タイトルバーに進捗インジケータを表示するなら
@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //タイトルバーへ進捗インジケータ表示 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); }
というように、レイアウトファイル読み込みの前に記述する
そして、進捗インジケータや進捗バーは
ページ読み込み開始の時点では表示するけど
読み込んだら非表示にしておく
この方がWebページを広く使えるし見やすい
この表示、非表示を実現するには
WebViewClientの
onPageStartedハンドラと
onPageFinishedハンドラを使う
mWebView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress){ super.lnProgressChanged(view, newProgress); //進捗状況の取得 mProgressBar.setProgress(newProgress); } }); mWebView.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon){ super.onPageStarted(view, url, favicon); //ProgressBarの表示 mProgressBar.setVisibility(View.VISIBLE); //進捗インジケータ表示 setProgressBarIndeterminateVisibility(true); } @Override public void onPageFinished(WebView view, String url){ super.onPageFinished(view,url); //ProgressBar非表示に mProgressBar.setVisibility(View.GONE); //進捗インジケータを非表示に setProgressBar.IndeterminateVisibility(false); } });