2012-03-22 16 views
4

WebViewのロード中に進行状況バーを表示したいとします。私はOnPageFinished()にそれを隠していますが、これは早すぎます。 Webviewはまだ画像をレンダリングしています。WebViewレンダリングが完了したときを知る方法

WebViewドキュメントでは、「onPageFinished()が呼び出されると、レンダリングピクチャはまだ更新されない可能性があります。新しいピクチャの通知を取得するには、onNewPicture(WebView、Picture)を使用してください。

ただし、OnNewPictureおよびPictureListenerインターフェイスは非推奨であり、廃止されました。レンダリングが完了したことを知る別の方法はありますか?

答えて

2

残念ながら、私はページが完全にロードされてレンダリングが完了したことを本当に知るイベントやメカニズムがないことを発見しました。

1

あなたのWebページのbodyタグの最後にJavaScript関数を追加して実行して、JavaScriptインターフェイス関数を呼び出してプログレスバーを隠すことができると思います。ただし、WebViewでJavaScriptを有効にすることには注意してください。

+2

私は必ずしもそれが助けになるとは思わない。画像やその他のリソースがロードされる前にスクリプトが実行されます。 –

1

私は同じ問題を抱えていますが、タイミングを知る方法はありません。 私が使用する唯一の方法は、postDelayed()によってレンダリングの完了に十分な余地を与えることです。

テキストで200Kを超える重いコンテンツを使用しないと、私の場合200msで十分です。

1

カスタムWebChromeClientを作成し、そのonReceivedIcon()メソッドまたはonProgressChanged()メソッドをオーバーライドする方法について説明します。 favIconがロードされ、onProgressChanged()を使用すると、onReceivedIcon()がトリガされ、webviewの読み込みの進行状況を問い合わせることができます。私はあなたがそれはあなたのニーズに合ったものは何でもonReceivedIcon onProgressChanged使用したりすることができます

webView.setWebChromeClient(new CustomWebChromeClient()); 

をスニペットこのコードを参照してください、これは

に役立ちます願っています。

public class CustomWebChromeClient extends WebChromeClient { 

    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     super.onProgressChanged(view, newProgress); 

     if (newProgress==100) { 
      progressBar.setVisibility(View.GONE); 
      progressBar.setProgress(newProgress); 
     } 
    } 

    @Override 
    public void onReceivedIcon(WebView view, Bitmap icon) { 
     // icon received here 
     super.onReceivedIcon(view, icon); 
    } 
} 
関連する問題