将特定的textview文本滚动到顶部不适用于上一屏幕已满

时间:2015-10-02 15:31:45

标签: java scrollto

我打算让以下代码滚动textview以便与该行一起滚动 找到令牌成为第一线。我的代码基于这个问题...... Scrolling a TextView to a specific line

除了显示最后一个屏幕已满时,即手动时,它才有效 用户滚动也不会滚动文本。我希望这个 行为与getLineForOffsetgetLineTop,尤其是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>

1 个答案:

答案 0 :(得分:0)

重新阅读我的帖子,特别是短语&#34; 当用户手动滚动时不会滚动文本&#34;,我意识到scrollTo相当根本不会这样做。相反,我使用Spannable突出显示找到的标记,以便该行不必位于TextView的顶部。对于现在会立即看到包含令牌及其上下文的行的用户来说,这要好得多。