在Android上使TextView可滚动

我在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);

实际上你不需要使用ScrollView

只需设置

android:maxLines = "AN_INTEGER"

android:scrollbars = "vertical"

您的布局的xml文件中的TextView属性。

然后使用:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

在你的代码中。

宾果,它滚动!


这就是我纯粹使用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>

笔记:

  • android:fillViewport="true"结合android:layout_weight="1.0"将使textview占用所有可用空间。

  • 定义滚动视图时,不要指定android:layout_height="fill_parent"否则scrollview不起作用! (这已经让我浪费了一个小时!FFS)。

  • 专家提示:

    要以编程方式在追加文本后滚动到底部,请使用以下命令:

    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());
            }
        });
    }
    

    所有真正需要的是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;
    
        /** Called when the activity is first created. */
        @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);
        }
    }
    
    链接地址: http://www.djcxy.com/p/36579.html

    上一篇: Making TextView scrollable on Android

    下一篇: How do I set the value property in AngularJS' ng