Android:滚动视图的总高度

Android:滚动视图的总高度,android,scroll,scrollview,Android,Scroll,Scrollview,我有一个自定义的ScrollView(扩展的android.widget.ScrollView),我在布局中使用它。我想测量这个滚动视图内容的总高度。getHeight()和getMeasuredHeight()没有给我正确的值(太高的数字) 背景信息:我想确定用户滚动了多远。我使用onScrollChanged来获取X值,但我需要知道百分比,所以我需要滚动条的总高度 非常感谢! Erik一个滚动视图总是有一个子视图。您只需获得孩子的身高即可确定总身高: int totalHeight = sc

我有一个自定义的ScrollView(扩展的android.widget.ScrollView),我在布局中使用它。我想测量这个滚动视图内容的总高度。getHeight()和getMeasuredHeight()没有给我正确的值(太高的数字)

背景信息:我想确定用户滚动了多远。我使用onScrollChanged来获取X值,但我需要知道百分比,所以我需要滚动条的总高度

非常感谢!
Erik

一个滚动视图总是有一个子视图。您只需获得孩子的身高即可确定总身高:

int totalHeight = scrollView.getChildAt(0).getHeight();

请参阅ScrollView的源代码。不幸的是,此方法是私有的,但您可以将其复制到自己的代码中。 请注意,其他答案不考虑填充

private int getScrollRange() {
    int scrollRange = 0;
    if (getChildCount() > 0) {
        View child = getChildAt(0);
        scrollRange = Math.max(0,
                child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop));
    }
    return scrollRange;
}

查看hintMy子视图是否返回0,即使它滚动。您是在onCreate中要求它的高度,还是在测量它之前要求它的高度?稍后尝试获取高度,请参见以下问题:确保计算子视图测量值的唯一方法是ViewTreeObserver.OnGlobalLayoutListener。确保这将接收注册到ViewTreeObserver的每个视图的回调,并且您需要区分它们。这是链接:如果你想知道它将滚动多少,你可以使用它自己的高度和它的孩子的高度之间的差值:
scrollView.getChildAt(0.getHeight()-scrollView.getHeight()
对于那些想使用这段代码的人来说,下面的操作将起作用:
Math.max(0,child.getHeight()-(scrollView.getHeight())-scrollView.getPaddingBottom()-scrollView.getPaddingTop())