2 yiranwujixian yiranwujixian 于 2012.09.26 11:40 提问

让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);

7个回答

niangzhi
niangzhi   2012.09.26 13:17
已采纳

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

android:maxLines = "AN_INTEGER"

android:scrollbars = "vertical"

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

yourTextView.setMovementMethod(new ScrollingMovementMethod())

它可以自由的滚动了。

ftm_csdn
ftm_csdn 尝试过已经成功
4 个月之前 回复
suannai0314
suannai0314 但是事实上maxLines需要你输入一个任意的数,这个并不是对每个屏幕尺寸和字体大小都适用?我发现用ScrollView实现它很简单,意味着我不必添加任何扩展的XML属性或代码(就像设置移动方法)。
5 年多之前 回复
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());
        } 
    });
}
restaurant123
restaurant123 layout_weight = “1.0” 应该在ScrollView里吧。。
2 年多之前 回复
favormm
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);
        }
    });
qqq1315421
qqq1315421 好用
一年多之前 回复
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.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);

    }
}
ThePromonkeyOf_HeLuo
ThePromonkeyOf_HeLuo   2016.11.10 11:41

“niangzhi ”这个用户回答的能实现,但没有具体解释清楚,好像导致了很多人的困惑。现在将解决方法,再详细说一下。**yourTextView.setMovementMethod(new ScrollingMovementMethod()), 这个才是正在让textView实现滚动的方法。** android:maxLines = "AN_INTEGER" 这个属性是设置文本显示地最大行数; android:scrollbars = "vertical" 这个属性是控制滚动条是否显示。

MarsHPing
MarsHPing   2015.07.24 10:55

这样做过后怎么去掉右边的滑动条?

onevo1
onevo1 直接把android:scrollbars="vertical"改为android:scrollbars="none" 因为这条属性的意思就是在滚动时显示那个混动条
2 年多之前 回复
ThePromonkeyOf_HeLuo
ThePromonkeyOf_HeLuo   2016.11.10 11:39

“niangzhi ”这个用户回答的能实现,但没有具体解释清楚,好像导致了很多人的困惑。现在将解决方法,再详细说一下。

 yourTextView.setMovementMethod(new ScrollingMovementMethod())

, 这个才是正在让textView实现滚动的方法。

 android:maxLines = "AN_INTEGER" 

这个属性是设置文本显示地最大行数;

 android:scrollbars = "vertical"

这个属性是控制滚动条是否显示。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!