如何检查aScrollView
是否高于屏幕?当 a 的内容ScrollView
适合屏幕时,ScrollView 是不可滚动的,当它的内容超过屏幕高度时它是可滚动的。ScrollView
在这方面我如何检查 a 的情况?
问问题
8423 次
4 回答
25
这是来自 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;
}
于 2013-09-02T13:21:06.593 回答
10
为时已晚,但我正在使用以下代码,它对我来说看起来更安全:
if (view.canScrollVertically(1) || view.canScrollVertically(-1)) {
// you code here
}
于 2016-06-15T15:16:40.640 回答
5
一个 ScrollView 总是有 1 个孩子。你需要做的就是得到孩子的身高
int scrollViewHeight = scrollView.getChildAt(0).getHeight();
并计算屏幕的高度
如果两者相等(或 scrollView 高度更高),那么它适合您的屏幕。
于 2013-09-02T12:12:19.033 回答
4
就我而言,我正在检查创建活动时我的滚动视图(包含文本)是否可以垂直滚动。在手机上,它会滚动,但在平板电脑上却不能。canScrollVertically
给我返回了不正确的值,因为它还不能确定。我通过在OnGlobalLayoutListener
.
(科特林)
override 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
于 2019-09-10T19:06:29.300 回答