让android的TextView可以滚动

来源:互联网 发布:bim施工现场布置软件 编辑:程序博客网 时间:2024/04/30 17:23
让android的TextView可以滚动
android

我想要在一个文本视图里显示一段文本,但是文字太多,一屏显示不下。我需要让我的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
niangzhi  2012.09.26 13:17
已采纳

事实上你不需要使用ScrollView
只要在你的布局的xml文件中设置你的TextView的属性:

android:maxLines = "AN_INTEGER"android:scrollbars = "vertical"

Then use:
然后在你的代码中用:

yourTextView.setMovementMethod(new ScrollingMovementMethod())

它可以自由的滚动了。

suannai0314
鹳狸媛 但是事实上maxLines需要你输入一个任意的数,这个并不是对每个屏幕尺寸和字体大小都适用?我发现用ScrollView实现它很简单,意味着我不必添加任何扩展的XML属性或代码(就像设置移动方法)。
2 年多之前 回复
Sueyexin
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.javapublic 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
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());        }     });}
favormm
大招至胜  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);        }    });
0 0