我打算让以下代码滚动textview
以便与该行一起滚动
找到令牌成为第一线。我的代码基于这个问题......
Scrolling a TextView to a specific line
除了显示最后一个屏幕已满时,即手动时,它才有效
用户滚动也不会滚动文本。我希望这个
行为与getLineForOffset
,getLineTop
,尤其是scrollTo
如何协同工作有关,但我不能很好地理解这一点,以确定如何处理它。关于滚动到特定行的同一主题还有一些其他SO问题,但我没有看到解决这个特定问题。
第一次查找时,iFind被初始化为0.
case R.id.findnext:
tokenString = token.getText().toString();
iFind = containsIgnoreCase(tokenString, html.getText().toString(), ++iFind);
if (iFind == -1) toast("Not Found: " + tokenString);
else {
final Layout lay = html.getLayout();
final int lineNumb = lay.getLineForOffset(iFind);
mScrollView.post(new Runnable() {
@Override
public void run() {
int y = lay.getLineTop(lineNumb);
mScrollView.scrollTo(0, y);
}
});
}
public int containsIgnoreCase(String needle, String hayStack, int start) {
final int lengthNeedle = needle.length();
final char firstLo = Character.toLowerCase(needle.charAt(0));
final char firstUp = Character.toUpperCase(needle.charAt(0));
int i;
for (i = start; i < hayStack.length() - lengthNeedle; i++) {
final char ch = hayStack.charAt(i);
if (ch != firstLo && ch != firstUp)
continue;
if (hayStack.regionMatches(true, i, needle, 0, lengthNeedle))
return i;
}
return -1;
}
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >
<TextView
android:id="@+id/codeHTML"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/background_material_light"
android:scrollbars="vertical"
android:fadeScrollbars="false"
android:typeface="monospace"
android:textColor="#000000"
android:textSize="15sp"
android:textIsSelectable="true" />
</ScrollView>
答案 0 :(得分:0)
重新阅读我的帖子,特别是短语&#34; 当用户手动滚动时不会滚动文本&#34;,我意识到scrollTo
相当根本不会这样做。相反,我使用Spannable
突出显示找到的标记,以便该行不必位于TextView的顶部。对于现在会立即看到包含令牌及其上下文的行的用户来说,这要好得多。