Есть ли способ получить видимое количество или диапазон видимых строк TextView?
У меня есть полноэкранный TextView, содержащий длинный Spanned, который требует прокрутки. TextView getLineCount() дает мне общее количество строк, используемых для всего блока текста, но я хотел бы знать, сколько строк текста в настоящее время отображается на экране.
Или, еще лучше, есть ли способ выяснить диапазон линий, которые в настоящее время видны на экране? Например, как свитки просмотра, могу ли я сказать, что в настоящее время отображаются строки 20-60?
Ответы
Ответ 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);
}
});