如果有很长一段话在单行显示但显示不完全,在TextView框中只会显示前面可以显示的字符,后面的用...代替,造成数据的丢失这时候就需要一个跑马灯效果来实现
在TextView控件的代码部分,添加以下四个属性
<span style="font-size:14px;">android:singleLine="true"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"</span>
第一条属性保证该文本控件是单行显示,第三条是完成跑马灯的效果,但是只有获得焦点后才可以实现这个效果,Textview默认是不会自动获取的,后两条属性是获得一个焦点
。package com.example.lzd.test;import android.content.Context;import android.util.AttributeSet;import android.widget.TextView;/** * Created by LZD on 2016/7/31. */public class Marquee extends TextView { public Marquee(Context context) { super(context); } public Marquee(Context context, AttributeSet attrs) { super(context, attrs); } public Marquee(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean isFocused() { return true; }}
现在的这个TextView是可以实现跑马灯效果的,但是如果在这个TextView下再添加一个跑马灯效果,我们想将其代码复制就可以,但是因为默认只获得一个焦点所以,下面的TextView就不会获得焦点,自然不会实现想要的跑马灯效果
在与MainActivity同包下定义一个class Marquee,让它继承TextView,实现它的三个构造方法并重写isFocused方法,return true;
isFocused方法,如果return true,则获得焦点,return false反之。重写之后的isFocused方法在每次执行的时候都会获得一个焦点。
最后在xml文件中将TextView替换为自己定义的继承了TextView的类所在的包下的类名,在这个例子中就是:<com.example.lzd.test.Marquee
再次运行的时候就会发现多个跑马灯效果都可以实现了