猿问

WebView显示内容时是否有侦听器?

使用WebViewClient和/或WebChromeClient,您可以获取页面加载的侦听器,但是有时在WebView中包含任何内容之前,显示任何内容之前调用它。

确定WebView何时显示其内容的有效方法是什么?

编辑:(试图更加清晰)

在WebView中加载页面时,我想将滚动条设置到特定位置。似乎只有在加载页面并且页面具有实际的内容高度时才能设置滚动位置。因此,我尝试了两种不同的方法来确定页面何时完成加载,分别是WebViewClient的onPageFinished()和WebChromeClient的onProgressChanged()。这两个告诉我页面何时完成加载。

但是,问题在于,有时会在页面显示之前调用它,因此页面没有高度,并且滚动调用不执行任何操作。

我试图找到一种确定何时可以滚动页面的可靠方法,即。当其具有内容高度时。

我想我可以在加载完成后设置一个检查循环,以在高度可用时继续寻找,但这似乎很不合理。希望有一种更清洁的方法。


慕尼黑8549860
浏览 521回答 3
3回答

当年话下

几年来,我成功地将Richard的答案与PictureListener结合使用,但是我不再建议将其作为最佳解决方案。这有两个原因:webView.setPictureListener和PictureListener都弃用。使用此侦听器将导致WebView经常分配新图片。这种分配非常昂贵,并且可能会对性能产生重大影响,甚至导致JellyBean MR1发生本机崩溃。相反,我建议创建WebView的子类并覆盖invalidate(),如下所示:@Overridepublic void invalidate() {    super.invalidate();    if (getContentHeight() > 0) {        // WebView has displayed some content and is scrollable.    }}如果仍要使用PictureListener方法,则在将其设置为null之后将其设置为null将获得更好的性能。

喵喵时光机

自从我第一次发布此内容以来,Android API 12中已不推荐使用此方法。感谢Google!我会保留原始答案:是的-有一个侦听器,用于了解内容何时完成加载。我必须在我的项目上创建一个,这样我才能做一个初始屏幕,直到Webview加载页面为止。它称为.setPictureListener。例如:mWebView.setPictureListener(new MyPictureListener());//... and then later on....class MyPictureListener implements PictureListener {    @Override    public void onNewPicture(WebView view, Picture arg1) {      // put code here that needs to run when the page has finished loading and      // a new "picture" is on the webview.          }    } 
随时随地看视频慕课网APP

相关分类

Android
我要回答