android-以编程方式将单词滚动到textview的视图中

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

我在google各处搜寻,似乎没有找到任何相关内容.

我的版面:

<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>

解决方法:

我假设没有水平滚动.如果存在,您可以从此答案中推断.看到您要突出显示匹配项时,我还要假设您已经将查找结果放下了.这意味着您在CharSequence中至少应具有搜索字符串的起始位置.

使用Layout.getLineForOffset查找字符串行,然后使用Layout.getLineTop获取行顶部的位置,然后使用View.scrollTo滚动到所需的位置.它看起来应该像这样:

Layout layout = textView.getLayout();
scrollView.scrollTo(0, layout.getLineTop(layout.getLineForOffset(startPos)));

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

上一篇:android-Spanned from Html.fromHtml,但具有用于自定义方案的自定义ClickableSpan


下一篇:android-如何限制spannablestring的行高,但保持其余行