【发布时间】:2011-01-15 09:52:03
【问题描述】:
我有一个全屏 TextView 持有需要滚动的长跨度。 TextView 的 getLineCount() 为我提供了用于整个文本块的总行数,但我想知道屏幕上当前可见多少行文本。
或者,更好的是,有没有办法计算出当前在屏幕上可见的线条范围?例如,当视图滚动时,我可以判断第 20-60 行当前可见吗?
【问题讨论】:
标签: android
我有一个全屏 TextView 持有需要滚动的长跨度。 TextView 的 getLineCount() 为我提供了用于整个文本块的总行数,但我想知道屏幕上当前可见多少行文本。
或者,更好的是,有没有办法计算出当前在屏幕上可见的线条范围?例如,当视图滚动时,我可以判断第 20-60 行当前可见吗?
【问题讨论】:
标签: android
要使它们工作,您应该以这种方式编写@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);
}
});
【讨论】:
我想出了答案:
int height = myTextView.getHeight();
int scrollY = myTextView.getScrollY();
Layout layout = myTextView.getLayout();
int firstVisibleLineNumber = layout.getLineForVertical(scrollY);
int lastVisibleLineNumber = layout.getLineForVertical(scrollY+height);
【讨论】: