如何检查ScrollView是否可滚动

时间:2013-10-21 19:58:56

标签: android

我想知道,如何检查当前ScrollView是否可滚动?似乎canScroll中没有名为isScrollableScrollView的公开方法。

可滚动:您可以上下移动ScrollView中的ViewGroup,当您上下移动滚动条时,滚动条将会显示。因此,如果ScrollView中只有很少的行,并且它们可以放在单个屏幕内,则ScrollView不可滚动。

3 个答案:

答案 0 :(得分:17)

您可以通过一些小数学来计算视图原始高度和内容的高度。如果这个高度的差异是< 0视图是可滚动的。

要计算原始高度,您可以使用View.getMeasuredHeight()。 由于ScrollView是一个ViewGroup并且最多只有一个孩子,因此请使用ViewGroup.getChildAt(0).getHeight()获取该孩子的身高;

使用ViewTreeObserver来获得高度,因为它会在布局/视图更改可见性时被调用,否则高度可能为0.

ScrollView scrollView = (ScrollView)findViewById(R.id...);
ViewTreeObserver observer = scrollView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int viewHeight = scrollView.getMeasuredHeight();
        int contentHeight = scrollView.getChildAt(0).getHeight();
        if(viewHeight - contentHeight < 0) {
            // scrollable
        }
    }
});

答案 1 :(得分:0)

我想我可能会遗漏一些东西,但不应该像检查

一样简单
scrollView.getHeight() >= parentView.getMeasuredHeight()

您实际上可能需要:scrollView.getChildAt(0).getHeight()和/或parentView.getHeight(),但想法是一样的。

答案 2 :(得分:0)

scrollView.viewTreeObserver
        .addOnGlobalLayoutListener {

            val isScrollable = scrollView.canScrollVertically(1)
        }