我想知道如何检查当前的ScrollView
是否可以滚动?似乎在ScrollView
中并没有名为canScroll
或isScrollable
的公共方法。
可滚动:您可以将ScrollView
内的ViewGroup上下移动,当您移动它时,滚动条将可见。因此,如果ScrollView
中只有少量行,并且它们可以适合单个屏幕,则ScrollView
是不可滚动的。
我想知道如何检查当前的ScrollView
是否可以滚动?似乎在ScrollView
中并没有名为canScroll
或isScrollable
的公共方法。
可滚动:您可以将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.viewTreeObserver
.addOnGlobalLayoutListener {
val isScrollable = scrollView.canScrollVertically(1)
}
我觉得我可能漏掉了什么,但是它不应该只是检查一下吗?
scrollView.getHeight() >= parentView.getMeasuredHeight()
你可能实际需要的是:scrollView.getChildAt(0).getHeight()
和/或 parentView.getHeight()
,但是思路是相同的。