偶尔做app的时候由于文字过多,但是又不想换行显示,影响整体布局效果,可以使用文字横向滚动效果。
使用继承Android原生TextView控件实现
- 设置xml文件TextView属性
<com.textview.MarqueeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:layout_margin="14dip"
android:textSize="18sp"
android:text="@string/address"/>
要点:
1.设置文字长度长于可显示范围:android:singleLine="true"
2.设置跑马灯显示样式:android:ellipsize="marquee"
3.设置循环次数为无限次:android:marqueeRepeatLimit
4.TextView只有在获取焦点后才会滚动显示隐藏文字,因此要重写TextView类的isFocused方法,使其默认始终返回true。
2. 重写TextView
跑马灯效果需要TextVIew获得当前的焦点(focus)。然而对于TextView这个控件来说,他的默认的Clickable,LongClickable,Focusable,FocusableInTouchMode这四个属性的值都是false。因此要重写TextView类的isFocused方法,使其默认始终返回true。
package com.textview;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class MarqueeTextView extends TextView{
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {
return true;
}
}