Есть ли способ получить видимый счетчик строк или диапазон TextView? - PullRequest
22 голосов
/ 10 февраля 2010

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

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

Ответы [ 2 ]

32 голосов
/ 10 февраля 2010

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

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

int firstVisibleLineNumber = layout.getLineForVertical(scrollY);
int lastVisibleLineNumber  = layout.getLineForVertical(scrollY+height);
5 голосов
/ 27 февраля 2014

Чтобы они работали, вы должны написать код, опубликованный @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);

            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...