如何在Android上获得scrollview总高度= Scrollview.getScrollY()

时间:2015-09-26 04:11:45

标签: android scrollview android-scrollview

我已经在一些论坛上看过,但这些技巧对我不起作用。

我有这段代码:

scrollview = (ScrollView)v.findViewById(R.id.scrollView);
    scrollview.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {

        @Override
        public void onScrollChanged() {

            Log.d(MainActivity.TAG, "scroll ch: "+scrollview.getScrollY()+"/"+scrollview.getChildAt(0).getHeight());
        }
    });

在我的layout.xml

<ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" >

    <LinearLayout
        android:id="@+id/principal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@drawable/horiz"
        android:orientation="vertical"
        android:showDividers="end|middle" >
    </LinearLayout>
</ScrollView>

当我向下滚动到最后一个时,我得到的getScrollY()小于getChildAt(0).getHeight()。

如何让两者具有相同的总大小?

2 个答案:

答案 0 :(得分:4)

正好回答这个问题,因为我遇到了同样的问题。

如果您记录:scrollView.getScrollY();并向下滚动到视图的底部,您将获得一个代表ScrollView高度的数字。您会注意到scrollView.getHeight()仅为您提供当前可见视图的高度。因此,您希望使用:scrollView.getChildAt(0).getHeight();,如here所示。但是这会给你一个大于scrollView.getScrollY()最大值的数字。所以你需要用scrollView的高度减去它。

TLDR:

totalHeightOfScrollView = scrollView.getChildAt(0).getHeight() 
    - scrollView.getHeight();

这将在最底部点等于scrollView.getScrollY()

答案 1 :(得分:0)

也许改变

layout_height="wrap_content"

layout_height="match_parent"