【问题标题】:How to check whether ScrollView is scrollable如何检查ScrollView是否可滚动
【发布时间】:2013-10-21 19:58:56
【问题描述】:

我在想,如何检查当前的ScrollView 是否可以滚动?看来,ScrollView 中没有名为 canScrollisScrollable 的公共方法。

Scrollable:可以上下移动ScrollView内部的ViewGroup,上下移动滚动条可见。因此,如果ScrollView 中只有很少的行,并且它们可以容纳在单个屏幕中,那么ScrollView 就不能滚动。

【问题讨论】:

  • Scrollable - 可以上下移动ScrollView内的ViewGroup,上下移动时滚动条可见。
  • 这就是滚动视图,我不明白你的问题

标签: android


【解决方案1】:

您可以做一些小数学来计算视图的原始高度和内容的高度。如果此高度差

要计算原始高度,您可以使用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.getChildAt(0).getHeight();而不是 scrollView.getChildAt(0).getMeasuredHeight();
  • @CheokYanCheng 在这种情况下,这些方法之间没有区别。当我测试它时,值是相等的。但是,如果您更改 Java 代码中的布局参数,请使用 getHeight() 确保返回正确的值。
【解决方案2】:
scrollView.viewTreeObserver
        .addOnGlobalLayoutListener {

            val isScrollable = scrollView.canScrollVertically(1)
        }

【讨论】:

    【解决方案3】:

    我想我可能遗漏了一些东西,但它不应该像检查是否那么简单

    scrollView.getHeight() >= parentView.getMeasuredHeight()
    

    您可能实际上需要:scrollView.getChildAt(0).getHeight() 和/或 parentView.getHeight(),但想法是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2019-11-29
      • 2023-01-30
      • 2010-10-03
      • 2018-11-01
      相关资源
      最近更新 更多