-
让android的TextView可以滚动
-
我想要在一个文本视图里显示一段文本,但是文字太多,一屏显示不下。我需要让我的TextView可以滚动。我应该怎么做,这是我的代码。
final TextView tv = new TextView(this); tv.setBackgroundResource(R.drawable.splash); tv.setTypeface(face); tv.setTextSize(18); tv.setTextColor(R.color.BROWN); tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL); tv.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent e) { Random r = new Random(); int i = r.nextInt(101); if (e.getAction() == e.ACTION_DOWN) { tv.setText(tips[i]); tv.setBackgroundResource(R.drawable.inner); } return true; } }); setContentView(tv);
4个回答
按赞数排序
- niangzhi 2012.09.26 13:17
- 已采纳
事实上你不需要使用ScrollView
只要在你的布局的xml文件中设置你的TextView的属性:
android:maxLines = "AN_INTEGER"
android:scrollbars = "vertical"
Then use:
然后在你的代码中用:
yourTextView.setMovementMethod(new ScrollingMovementMethod())
它可以自由的滚动了。
- 鹳狸媛 但是事实上maxLines需要你输入一个任意的数,这个并不是对每个屏幕尺寸和字体大小都适用?我发现用ScrollView实现它很简单,意味着我不必添加任何扩展的XML属性或代码(就像设置移动方法)。
- 2 年多之前 回复
- Sueyexin 2012.09.26 14:01
-
所有的方法中真的有用的是setMovementMethod()。这是用LinearLayout的一个示例代码。
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
/>
</LinearLayout>
WordExtractTest.java
public class WordExtractTest extends Activity {
TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.tv1);
loadDoc();
}
private void loadDoc(){
String s = "";
for(int x=0;x<=100;x++){
s += "Line: "+String.valueOf(x)+"\n";
}
tv1.setMovementMethod(new ScrollingMovementMethod());
tv1.setText(s);
}
}
- yizhenbeifeng 2012.09.26 14:51
-
这就是我完全用XML实现的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:id="@+id/TEXT_STATUS_ID"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"/>
</ScrollView>
</LinearLayout>
注意:
1)android:fillViewport="true"和android:layout_weight="1.0"将使得文本视图占据所有可用的空间。
2)当定义Scrollview,不要指定android:layout_height="fill_parent" 否则scrollview 不起作用!(就因为这个浪费了我一个小时的时间)
我赞成的观点:
为了能够在追加文本之后自动滚动到底部,用这个:
mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);
private void scrollToBottom()
{
mScrollView.post(new Runnable()
{
public void run()
{
mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
}
});
}
- 大招至胜 2015.01.15 10:26
-
textView.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
textView.append(line);
final int scrollAmount = textView.getLayout().getLineTop(textView.getLineCount()) - textView.getHeight();
if (scrollAmount > 0)
textView.scrollTo(0, scrollAmount);
else
textView.scrollTo(0, 0);
}
});