Android: Auto-scrolling text in TextView

2019-02-13 23:00发布

I've created a series of tabs that have a fixed width of 100px. A tab contains an image with some text below it. If the text is too long to fit, I want it to automatically scroll. I only want one line. I tried the following but it did not work. I am using Android 2.3:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginRight="3dp"
    android:layout_marginTop="3dp"
    android:background="#ff737373"
    android:gravity="center"
    android:minWidth="64dp"
    android:orientation="vertical"
    android:padding="3dp" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:tag="tabImage" >
    </ImageView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:maxWidth="100px"
        android:tag="tabCaption"
        android:textColor="#ffd9d9d9"
        android:textSize="16sp" />

</LinearLayout>

Any idea why this does not work? I came across the solution from another posting and there the user indicated that it works.

4条回答
虎瘦雄心在
2楼-- · 2019-02-13 23:34
<TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:gravity="center"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:text="Auto text scroller" 
        android:textSize="50sp"
        />
查看更多
beautiful°
4楼-- · 2019-02-13 23:40

Be aware that if the text is smaller in length than the width of the bounds defined for it it WILL NOT scroll. In this case you may want to extend the text with itself something like:

-. . . . .

String charsInBreak = "   ";
 while (bounds.width() < this.m_width)
 {
    m_text = (m_text + charsInBreak + m_text);
    paint.getTextBounds(m_text, 0, m_text.length(), bounds);
 } 

And if you want your text to marquee forever:

m_textView.setMarqueeRepeatLimit(-1);
查看更多
姐就是有狂的资本
5楼-- · 2019-02-13 23:47

In your activity you have to add if you want to marquee on text

  TextView tv=(TextView)findViewById(R.id.textview1);
  tv.setSelected(true);
查看更多
登录 后发表回答