Android WebView报告的内容高度不正确

时间:2017-03-02 19:38:58

标签: android scroll android-webview

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

0 个答案:

没有答案