如何知道WebView渲染何时完成

时间:2012-03-22 18:51:02

标签: android android-webview

我想在加载WebView时显示进度条。我将它隐藏在OnPageFinished()上,但这太早了。 Webview仍在渲染图像。

WebView文档指出:“当调用onPageFinished()时,渲染图片可能尚未更新。要获取新图片的通知,请使用onNewPicture(WebView,Picture)。”

但是,OnNewPicture和PictureListener接口已弃用且已过时。还有另一种方法可以知道渲染是否完整?

4 个答案:

答案 0 :(得分:2)

不幸的是,我发现没有事件或机制可以真正知道页面何时完全加载并完成渲染。

答案 1 :(得分:1)

我认为你可以在你网页的body标签的末尾添加和执行JavaScript函数来调用你的JavaScript界面​​函数来隐藏进度条。但是,要注意在WebView上启用JavaScript。

答案 2 :(得分:1)

我遇到同样的问题,但没有办法知道时间。 我使用的唯一方法是通过postDelayed()为渲染完成提供足够的空间。

在我的情况下,如果你不在文本中使用超过200K的重内容,200ms就足够了。

答案 3 :(得分:1)

如何创建自定义WebChromeClient并重写其onReceivedIcon()或onProgressChanged()方法。加载favIcon后将触发onReceivedIcon()并使用onProgressChanged(),您可以查询webview加载的进度。我希望这有帮助

请参阅此代码段

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