【问题标题】:Is there a way of retrieving a TextView's visible line count or range?有没有办法检索 TextView 的可见行数或范围?
【发布时间】:2011-01-15 09:52:03
【问题描述】:

我有一个全屏 TextView 持有需要滚动的长跨度。 TextView 的 getLineCount() 为我提供了用于整个文本块的总行数,但我想知道屏幕上当前可见多少行文本。

或者,更好的是,有没有办法计算出当前在屏幕上可见的线条范围?例如,当视图滚动时,我可以判断第 20-60 行当前可见吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    要使它们工作,您应该以这种方式编写@Robert 发布的代码:

    ViewTreeObserver vto = txtViewEx.getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    ViewTreeObserver obs = txtViewEx.getViewTreeObserver();
                    obs.removeOnGlobalLayoutListener(this);
                    height = txtViewEx.getHeight();
                    scrollY = txtViewEx.getScrollY();
                    Layout layout = txtViewEx.getLayout();
    
                    firstVisibleLineNumber = layout.getLineForVertical(scrollY);
                    lastVisibleLineNumber = layout.getLineForVertical(height+scrollY);
    
                }
            });
    

    【讨论】:

      【解决方案2】:

      我想出了答案:

      int height    = myTextView.getHeight();
      int scrollY   = myTextView.getScrollY();
      Layout layout = myTextView.getLayout();
      
      int firstVisibleLineNumber = layout.getLineForVertical(scrollY);
      int lastVisibleLineNumber  = layout.getLineForVertical(scrollY+height);
      

      【讨论】:

      • @MrSuS 如果您想在 View 布局之前检索它,它会返回 null。
      • 我尝试使用上述代码,但在横向使用时返回错误的行数。也很少有部分线条可见。
      • 让我得到 getLayout() 返回 null
      • getScrollY 总是为我返回 0。
      • 对我不起作用返回最后一行的索引(我通过计数检查),可能是因为填充或其他原因。
      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多