在文本视图上自动向下滚动

9 浏览
0 Comments

在文本视图上自动向下滚动

我在我的应用程序中有3个组件,顶部有1个文本视图(输入类型为textMultiline,滚动条为垂直,位置为底部|右侧),中间有1个编辑视图,底部有1个按钮。当我在编辑视图上输入内容并点击按钮时,编辑视图上写的文本会显示在文本视图上。每次我点击确定,文本会显示在底部,显示的是前三个输入。我必须滚动文本视图才能看到我最后的输入。

现在,我希望用户能在他们的文本视图上看到他们最后的输入。我想知道是否有这样的代码,可以使文本视图在每次输入新文本时自动向下滚动。我对开发Android应用程序还很陌生。谢谢!

0
0 Comments

问题原因:当在textview中输入文本时,文本会被覆盖在之前输入的文本之下,如果textview的高度有限,超过几行后就无法看到后续输入的文本。

解决方法:可以尝试设置textview的焦点以及滚动到底部。

设置焦点:

tv.setFocusable(true);

滚动到底部:

int scroll_amount = tv.getBottom();
tv.scrollTo(0, scroll_amount);

或者尝试:

int scroll_amount = (int) (tv.getLineCount() * tv.getLineHeight()) - (tv.getBottom() - tv.getTop());
tv.scrollTo(0, scroll_amount);

以上方法可以在每次添加文本时自动滚动到底部,以便能够看到全部文本。

0
0 Comments

问题:Auto scroll down on textviews(在TextView上自动滚动)

原因:当文本内容超过TextView的显示范围时,需要进行滚动操作。可以通过调用scrollView的scrollTo方法来实现自动滚动到指定位置。

解决方法:创建一个自定义的ScrollView类,重写onScrollChanged方法,并在其中记录y坐标的最大值。然后创建一个moveToEnd方法,通过调用scrollTo方法将ScrollView滚动到最大的y坐标位置。在布局文件中使用自定义的ScrollView类,并在需要自动滚动的地方调用moveToEnd方法即可实现自动滚动。

以下是具体的代码实现:

package com.android.mypackage;
public class MyScrollView extends ScrollView {
    private int maxY = 0;
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (y > maxY)
            maxY = y;
    }
    public void moveToEnd() {
        this.scrollTo(0, maxY);
    }
}

在布局文件中使用自定义的ScrollView类:

...

    

...

在需要自动滚动的地方调用moveToEnd方法即可实现自动滚动。需要注意的是,具体的y值需要根据实际情况进行调试和设置。如果不想使用自定义的ScrollView类,可以尝试其他方法来实现自动滚动。

0
0 Comments

问题出现的原因是变量scroll_amount在onCreate()方法外调用,导致无法正确使用。解决方法是将scroll_amount变量的调用位置移至onCreate()方法内部。以下是修改后的代码:

public void onClick(View v) {
    // TODO Auto-generated method stub
    log.setText(log.getText() + "\n" + input.getText());
    if (log.getLineCount() > 5) {
        int scroll_amount = 0; // 在此处重新定义scroll_amount变量
        scroll_amount = scroll_amount + log.getLineHeight();
        log.scrollTo(0, scroll_amount);
    }
}

感谢大家的答复和帮助!我已经找到了问题的答案,也感谢Sharma的近乎正确的回答!希望这个解决方法对以后的问题有所帮助。

0