我如何检查一个ScrollView
是否高于屏幕?当ScrollView
的内容适合屏幕时,它是不可滚动的;当其内容超出屏幕高度时,它可以滚动。如何检查ScrollView
在这方面的条件?
我如何检查一个ScrollView
是否高于屏幕?当ScrollView
的内容适合屏幕时,它是不可滚动的;当其内容超出屏幕高度时,它可以滚动。如何检查ScrollView
在这方面的条件?
以下是来自ScrollView的代码,该类为私有,但可以进行修改以在类本身外部使用。
/**
* @return Returns true this ScrollView can be scrolled
*/
private boolean canScroll() {
View child = getChildAt(0);
if (child != null) {
int childHeight = child.getHeight();
return getHeight() < childHeight + mPaddingTop + mPaddingBottom;
}
return false;
}
太晚了,但是我正在使用以下代码,它看起来更安全:
if (view.canScrollVertically(1) || view.canScrollVertically(-1)) {
// you code here
}
ScrollView始终只有一个子组件。你所需做的就是获取子组件的高度。
int scrollViewHeight = scrollView.getChildAt(0).getHeight();
计算屏幕高度
如果两者相等(或scrollView的高度更大),则适合您的屏幕。
bool childLargerThanParent = scrollView.getChildAt(0).getHeight() > scrollView.getHeight();
?更安全,计算量也少。 - auhmaanoverride fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// Must use onGlobalLayout or else canScrollVertically will not return the correct value because the layout hasn't been made yet
scrollView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
// If the scrollView can scroll, disable the accept menu item button
if ( scrollView.canScrollVertically(1) || scrollView.canScrollVertically(-1) )
acceptMenuItem?.isEnabled = false
// Remove itself after onGlobalLayout is first called or else it would be called about a million times per second
scrollView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
我的使用场景是显示使用条款。我不希望用户在滚动到底部之前启用接受按钮。虽然有些晚了,但我希望这可以解决一些关于canScrollVertically
的困惑。
canScrollVertically(...)
在 onGlobalLayout()
中返回 false
。这意味着该按钮从一开始就启用,无论用户是否滚动到底部。 - user2891462