我想知道,如何检查当前ScrollView
是否可滚动?似乎没有调用canScroll
或isScrollable
in 的公共方法ScrollView
。
Scrollable:可以上下移动 ScrollView 内部的 ViewGroup,上下移动时滚动条可见。因此,如果 中只有很少的行ScrollView
,并且它们可以容纳在单个屏幕内,ScrollView
则不可滚动。
我想知道,如何检查当前ScrollView
是否可滚动?似乎没有调用canScroll
或isScrollable
in 的公共方法ScrollView
。
Scrollable:可以上下移动 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()
相反,但想法是一样的。