我正在处理应该加载网页的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。