Есть ли способ получить видимый счетчик строк или диапазон TextView?

У меня есть полноэкранный TextView, содержащий длинный Spanned, который требует прокрутки. GetLineCount() TextView дает мне общее количество строк, используемых для всего блока текста, но я хотел бы знать, сколько строк текста в настоящее время видны на экране.

Или, что еще лучше, есть ли способ определить диапазон линий, видимых в настоящее время на экране? Например, как прокручивается представление, могу ли я сказать, что строки 20-60 в настоящее время видны?

2 ответа

Решение

Я разобрался с ответом:

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);

            }
        });
Другие вопросы по тегам