Android 有没有一种方法可以检索TextView';s可见行数或范围?

Android 有没有一种方法可以检索TextView';s可见行数或范围?,android,Android,我有一个全屏文本视图,其中包含一个需要滚动的长跨距文本。TextView的getLineCount()为我提供了整个文本块使用的总行数,但我想知道屏幕上当前可见的文本行数 或者,更好的办法是,有没有办法计算出屏幕上当前可见的线条范围?例如,当视图滚动时,我能告诉您第20-60行当前可见吗?我找到了答案: int height = myTextView.getHeight(); int scrollY = myTextView.getScrollY(); Layout layout =

我有一个全屏文本视图,其中包含一个需要滚动的长跨距文本。TextView的getLineCount()为我提供了整个文本块使用的总行数,但我想知道屏幕上当前可见的文本行数


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

我找到了答案:

int height    = myTextView.getHeight();
int scrollY   = myTextView.getScrollY();
Layout layout = myTextView.getLayout();

int firstVisibleLineNumber = layout.getLineForVertical(scrollY);
int lastVisibleLineNumber  = layout.getLineForVertical(scrollY+height);

要使它们正常工作,您应该以以下方式编写@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);

            }
        });

@MrSuS如果您想在布局视图之前检索它,它将返回null。我尝试使用上述代码,但在横向使用时返回错误的行数。还有一些部分行是可见的。对于我来说get getLayout()返回nullgetScrollY总是为我返回0。对于我来说不工作返回最后一行的索引(我通过计数检查),可能是因为填充或其他原因。