首先,一个Textview可以很简单的实现,但是多个textview的实现方式就比较麻烦 .
一个Textview实现滚动的条件:
1、文本长度足够长
2、ellipsize="marquee"
3、focusable="true" --- focusableInTouchMode="true"
当然,既然要滚动那就必须设置singleLine属性为true
<TextView android:id="@+id/TextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine="true" android:text="@string/text" />
多个textview的滚动实现:
我们在设置单个textview的时候会发现第三步设置了focusable,但是这个属性在对第二个textview设置的时候是无效的,即不能滚动了。所以我们需要自建一个textview
新建一个类继承自textview,重写构造函数,加入isFocused函数返回为true
public class MarqueeText extends TextView { public MarqueeText(Context context) { super(context); } public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public MarqueeText(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean isFocused() { return true; } }
在使用textview中使用,甚至可以不再加入focusable="true" --- focusableInTouchMode="true" 这两个属性
<com.puzzle.lyxin.myapplication_textview.MarqueeText android:id="@+id/TextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" android:text="@string/text" />
另外,这样默认的重复滚动次数好像是3次,如果要一直滚动可以加入属性到xml中
android:marqueeRepeatLimit="marquee_forever"