在文本视图上自动向下滚动
问题原因:当在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);
以上方法可以在每次添加文本时自动滚动到底部,以便能够看到全部文本。
问题: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类,可以尝试其他方法来实现自动滚动。
问题出现的原因是变量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的近乎正确的回答!希望这个解决方法对以后的问题有所帮助。