我想知道,如何检查当前的ScrollView
是否可以滚动?看来,在ScrollView
中没有公开的方法称为canScroll
或isScrollable
。如何检查ScrollView是否可滚动
可滚动:您可以向上和向下移动ScrollView中的ViewGroup,并且滚动条在上下移动时可见。所以,如果ScrollView
中只有很少的行,并且它们可以放在单个屏幕内,那么ScrollView
不可滚动。
我想知道,如何检查当前的ScrollView
是否可以滚动?看来,在ScrollView
中没有公开的方法称为canScroll
或isScrollable
。如何检查ScrollView是否可滚动
可滚动:您可以向上和向下移动ScrollView中的ViewGroup,并且滚动条在上下移动时可见。所以,如果ScrollView
中只有很少的行,并且它们可以放在单个屏幕内,那么ScrollView
不可滚动。
你可以做一些小数学计算视图原始高度和内容的高度。如果这个高度的差值是< 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
}
}
});
是否有任何理由使用scrollView.getChildAt(0).getHeight();而不是scrollView.getChildAt(0).getMeasuredHeight(); –
@CheokYanCheng在这种情况下,这种方法没有区别。正如我测试它的值是相等的。但是,如果您在Java代码中更改布局参数,请使用getHeight()来确保正确的值返回。 –
我想我可能失去了一些东西,但它不应该是简单的检查,如果
scrollView.getHeight() >= parentView.getMeasuredHeight()
你可能确实需要:scrollView.getChildAt(0).getHeight()
和/或parentView.getHeight()
代替,但这个想法是一样的。
定义“滚动” – njzk2
滚动 - 你可以上下移动ScrollView中的ViewGroup,并且当您上下移动滚动条时可以看到。 –
这就是scrollview是关于什么,我不明白你的问题 – njzk2