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