2013-10-21 149 views
7

我想知道,如何检查当前的ScrollView是否可以滚动?看来,在ScrollView中没有公开的方法称为canScrollisScrollable如何检查ScrollView是否可滚动

可滚动:您可以向上和向下移动ScrollView中的ViewGroup,并且滚动条在上下移动时可见。所以,如果ScrollView中只有很少的行,并且它们可以放在单个屏幕内,那么ScrollView不可滚动。

+0

定义“滚动” – njzk2

+0

滚动 - 你可以上下移动ScrollView中的ViewGroup,并且当您上下移动滚动条时可以看到。 –

+0

这就是scrollview是关于什么,我不明白你的问题 – njzk2

回答

15

你可以做一些小数学计算视图原始高度和内容的高度。如果这个高度的差值是< 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 
     } 
    } 
}); 
+0

是否有任何理由使用scrollView.getChildAt(0).getHeight();而不是scrollView.getChildAt(0).getMeasuredHeight(); –

+0

@CheokYanCheng在这种情况下,这种方法没有区别。正如我测试它的值是相等的。但是,如果您在Java代码中更改布局参数,请使用getHeight()来确保正确的值返回。 –

0

我想我可能失去了一些东西,但它不应该是简单的检查,如果

scrollView.getHeight() >= parentView.getMeasuredHeight() 

你可能确实需要:scrollView.getChildAt(0).getHeight()和/或parentView.getHeight()代替,但这个想法是一样的。

相关问题