单行TextView实现跑马灯效果的简单方法
代码如下:
<TextView
android:layout_weight="wrap_content"
android:layout_height="warp_content"
android:singleLine="true" //限制TextView单行显示,避免换行
android:ellipsize="marquee" //以横向滚动方式显示(需要获取当前焦点)
android:focusable="true" //获取焦点
android:focusableInTouchMode="ture" //触屏模式下可获得焦点
android:text="某个超过单行显示限制的String值" />
但是这样的方法只能实现单行的跑马灯TextView,多行TextView不能同时滚动显示。
实现多个TextView跑马灯效果的方法
1. 自定义一个TextView类,继承系统TextView,并重写父类中所有的三个构造函数。
代码如下:
public class MyTextView extends TextView {
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
2. 重载TextView类中的 "isFocused()" 方法,并返回ture。
代码如下:
@Override
public boolean isFocused() {
return true;
}
3. 将XML文件中默认的TextView控件换成自定义的TextView,方法是:包名+类名
代码如下:
<com.example.asimov.marqueetextview.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/text" />
这样,以自定义TextView添加的TextView都能实现滚动显示。