Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Я понял ответ:

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

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

Ответ 2

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

            }
        });