Webページの進捗状況の取得

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です