跑马灯是一种很常见的效果,当内容超过了控件所能显示的区域时,内容在控件中滚动的效果。
实现跑马灯效果需要配置文件中添加如下的属性:
android:singleLine="true" //单行显示
android:ellipsize="marquee" //内容过长时显示方式,这里是以跑马灯的方式滚动
android:marqueeRepeatLimit="marquee_forever" //限制滚动的次数 ,这里是无限制
android:focusable="true" //获取焦点
android:focusableInTouchMode="true"
但是TextView只有在获得焦点后才能滚动显示控件中的内容,所以需要自定义一个控件,继承TextView,重写isFocused方法
package com.example.marqueetextdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class MarqueeText extends TextView {//自定义控件继承TextView
public MarqueeText(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MarqueeText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
public boolean isFocused() {
// TODO Auto-generated method stub
return true;//返回true,表示TextView获得焦点,返回false表示失去焦点
}
}
之后需要在配置文件使用这个控件:
<com.example.marqueetextdemo.MarqueeText
android:id="@+id/txtView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt_name"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"/>
效果如下:
结束!