以编程方式将单词滚动到文本视图中的视图中

spr*_*t12 4 android scroll scrollview textview

我有包含大量文本的 TextView,用户搜索某些内容并突出显示匹配项,但是它们可能位于页面下方,有没有办法滚动到第一个匹配项?

我查遍了谷歌,似乎没有找到任何相关的东西。

我的布局:

<ScrollView android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:requiresFadingEdge="vertical"
            android:id="@+id/sclView">

    <TextView android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:id="@+id/txtView"
              android:textSize="16sp"
              android:paddingTop="10dp"
              android:paddingLeft="20dp"
              android:paddingRight="20dp"
              android:paddingBottom="10dp"
              android:lineSpacingExtra="5dp"
              android:textColor="@color/TextGray"
              android:textIsSelectable="true"/>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

kab*_*uko 5

我假设没有水平滚动。如果有,你可以从这个答案中推断出来。当您突出显示匹配项时,我还假设您已经完成了查找部分。这意味着您应该至少有一个搜索字符串的起始位置CharSequence

使用Layout.getLineForOffset以查找字符串的行,然后Layout.getLineTop获得该行的顶部位置,然后View.scrollTo滚动到所需的位置。它应该是这样的:

Layout layout = textView.getLayout();
scrollView.scrollTo(0, layout.getLineTop(layout.getLineForOffset(startPos)));
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过这个,所以你可能需要做一些事情来处理你添加的填充等,但我认为一般的想法应该可行。