我正在开发一款与
问题是,在几个页面上,即使我可以手动向下滚动,
目前,为了测试此问题,我已设置一个滚动更改侦听器,以在
我已经设置了一个 WebChromeClient,并重载了 onProgressChanged() 方法。我知道当内容高度被检索到时,页面加载完成了。但是为什么 WebView 会将内容高度错误地报告为一页,实际上它比较长呢?
编辑:我在 Android 6.0、7.0 和 7.1 上运行过该应用程序。build.gradle 中的 minSdkVersion 是23,targetSdkVersion 是25。WebView 版本是44.0.2403.119。
Android
相关的应用程序,该应用程序旨在加载网页,并且如果内容高度大于视图高度,则滚动内容。问题是,在几个页面上,即使我可以手动向下滚动,
WebView.getContentHeight()
似乎返回视图的确切高度。这意味着我没有正确的值来进行动画处理,滚动不会正确地工作。目前,为了测试此问题,我已设置一个滚动更改侦听器,以在
WebView
滚动到末尾时记录消息。 webView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int i, int i1, int i2, int i3) {
Log.d(TAG, String.format("scrollX: %d, scrollY: %d, oldScrollX: %d, oldScrollY: %d", i, i1, i2, i3));
int height = (int) Math.floor(webView.getContentHeight() * webView.getScaleY());
if (webView.getScrollY() + webView.getHeight() >= height && progress > 99)
Log.d(TAG, "Reached bottom: " + height);
}
});
日志显示缩放内容高度为1586,Web视图高度为1586。然而,我可以手动滚动页面向下,并获得以下日志输出:
WebPageView: scrollX: 0, scrollY: 1960, oldScrollX: 0, oldScrollY: 1774
WebPageView: Reached bottom: 1773
WebPageView: scrollX: 0, scrollY: 1959, oldScrollX: 0, oldScrollY: 1960
WebPageView: Reached bottom: 1773
根据我的观察,这明显表明内容高度被错误地报告了,因为:
WebView.getScrollY() + WebView.getHeight() > WebView.getContentHeight() * WebView.getScaleY()
我已经设置了一个 WebChromeClient,并重载了 onProgressChanged() 方法。我知道当内容高度被检索到时,页面加载完成了。但是为什么 WebView 会将内容高度错误地报告为一页,实际上它比较长呢?
编辑:我在 Android 6.0、7.0 和 7.1 上运行过该应用程序。build.gradle 中的 minSdkVersion 是23,targetSdkVersion 是25。WebView 版本是44.0.2403.119。