Android WebView 获取内容高度()不返回正确的值

标签 android scroll android-webview

我有一个要求,我在其中显示一个 WebView,其下方有一个复选框。该复选框最初处于禁用状态。只有当用户向下滚动到 webview 的底部时,复选框才会被启用。我通过扩展 Webview 类并编写我的 onScrollChanged 监听器来实现这一点,如下所示:

@Override
protected void onScrollChanged(int left, int top, int oldLeft, int oldTop) {
     if ( (getContentHeight() - (top + getHeight())) <= mMinDistance )
     {
         Log.i("MYACT","content height: "+getContentHeight()+" top: "+top+" Height: "+getHeight()+" minDistance: "+mMinDistance);
         Log.i("MYACT", "Reached bottom");
         mOnBottomReachedListener.onBottomReached(this);
     }
     else{
         Log.i("MYACT","content height: "+getContentHeight()+" top: "+top+" Height: "+getHeight()+" minDistance: "+mMinDistance);
         Log.i("MYACT", "Not at bottom");
         mOnBottomReachedListener.onNotAtBottom(this);
     }
     super.onScrollChanged(left, top, oldLeft, oldTop);
}

问题是条件

(getContentHeight() - (top + getHeight())) <= mMinDistance) //mMinDistance is 0 in my case

甚至在我向下滚动到页面底部之前就已经很满意了。如您所见,我尝试在日志中打印每个值,发现参数"top" 有时会超过值"getContentHeight"

示例日志值:

08-14 11:28:19.401: I/MYACT(1075): content height: 3020 top: 3861 Height: 416 minDistance: 0

在这种情况下我怎样才能避免这种情况?我应该使用不同的方式来检查我是否已经向下滚动到页面底部吗?

谢谢

最佳答案

经过一些研究,我发现了这个问题。 Webview 通常会根据屏幕尺寸对网页进行缩放,然后进行渲染。它通常会缩放页面,使其在手机中看起来不会太小。您可以使用 getScale()

方法获取此比例因子

因此,在我的例子中,我会使用以下条件来检查是否已到达页面末尾

(getContentHeight()*getScale() - (top + getHeight())) <= mMinDistance) //mMinDistance is 0 in my case

关于Android WebView 获取内容高度()不返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236005/

相关文章:

android - 为什么 android intent 第一次不起作用?

java - Fab 按钮 android onClick 导致应用程序崩溃?

javascript - HTML:动态修复用户正在阅读的标题和副标题在顶部

html - Angular 应用程序中的滚动按钮

html - 如何将固定的div固定到其他div的底部?

android - 在 WebView 中隐藏滚动条

java - Android - 每隔几秒改变球的颜色

android - 如何监听 Android Webview 中的任何 cookie 更改

javascript - Xamarin : use Android WebView EvaluateJavascript

android - 如何使 MultiAutoCompleteTextView 搜索子字符串