2012-03-22 80 views
4

我想在WebView加載時顯示進度條。我將它隱藏在OnPageFinished()上,但這還爲時過早。 Webview仍在渲染圖像。如何知道WebView呈現何時完成

WebView文檔聲明:「調用onPageFinished()時,渲染圖片可能還沒有更新。要獲取新圖片的通知,請使用onNewPicture(WebView,Picture)。」

但是,OnNewPicture和PictureListener接口已棄用且已過時。是否有另一種方法來知道渲染完成?

回答

2

不幸的是,我發現沒有事件或機制可以真正知道頁面何時完全加載和完成渲染。

1

我認爲你可以在你的網頁的body標籤的末尾添加和執行JavaScript函數來調用你的JavaScript接口函數來隱藏進度條。但是,要小心在WebView上啓用JavaScript。

+2

我不認爲這會有所幫助;該腳本將在加載圖像和其他資源之前運行。 – 2012-10-17 18:45:59

1

我受到同樣的問題,但沒有辦法知道時機。 我使用的唯一方法是通過postDelayed()爲渲染完成提供足夠的空間。

在我的情況下,如果你不使用大於200K的重量內容,200毫秒就足夠了。

1

如何創建自定義WebChromeClient並覆蓋其onReceivedIcon()或onProgressChanged()方法。一旦加載了favIcon並且使用onProgressChanged(),onReceivedIcon()將被觸發,您可以查詢web視圖加載的進度。我希望這有助於

請參考此代碼段

webView.setWebChromeClient(new CustomWebChromeClient()); 

您可以使用onProgressChanged或onReceivedIcon任何適合您的需求。

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