检查ScrollView是否高于屏幕/可滚动

时间:2013-09-02 12:00:31

标签: android android-layout

如何检查ScrollView是否高于屏幕?当ScrollView的内容适合屏幕时,ScrollView不可滚动,当其内容超出屏幕高度时可滚动。 如何在这方面检查ScrollView的条件?

4 个答案:

答案 0 :(得分:23)

这是来自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;
}

答案 1 :(得分:6)

太晚了,但我使用以下代码,对我来说看起来更安全:

if (view.canScrollVertically(1) || view.canScrollVertically(-1)) {
    // you code here
}

答案 2 :(得分:5)

ScrollView总是有一个孩子。你需要做的就是获得孩子的身高

 int scrollViewHeight = scrollView.getChildAt(0).getHeight();

并计算屏幕高度

如果两者相等(或者scrollView Height更多),那么它就适合你的屏幕。

答案 3 :(得分:1)

就我而言,我正在检查我的scrollView(包含文本)在创建活动时是否可以垂直滚动 。在手机上,它可以滚动,但在平板电脑上则不能。 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

的一些困惑