今天学习了安卓跑马灯的效果,在html中使用的标签就是<marquee>...</marquee>。
当插入一个安卓控件TextView,在里面输入的文本就会过长,当用android:singleLine="true"限制为一行显示之后,多余的文本就会隐藏,这个时候想到了使得这段文本变成HTML 中的跑马灯效果。
用到的属性是:android:ellipsize
(其中android:ellipsize还有以下几个属性
android:ellipsize = "end" 省略号在结尾
android:ellipsize = "start" 省略号在开头
android:ellipsize = "middle" 省略号在中间
android:ellipsize = "marquee" 跑马灯)
当加入这个:android:ellipsize="marquee" 时,打开安卓模拟器发现并没有跑马灯的效果,查阅网上,发现还需要加入两段属性,分别是:
android:focusable="true"
android:focusableInTouchMode="true"
加入这两段属性之后,终于有了跑马灯的效果。
但是这是不够的,当我再次创建一个Textview空间,再插入相同的属性让其实现跑马灯的效果我会发现:当一个以上的textview控件需要跑马灯效果的时候,上面的做法只能保证其一个起作用。
于是查阅网上,需要重写一个类来实现多个跑马灯的效果:
首先src文件夹下新建一个类MarqueeText继承自textview,并加入其所有的构造函数,接着实现其中的一个构造方法isFocused()
MarqueeText.java 代码如下:
package com.example.paomadeng;
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewDebug.ExportedProperty;
import android.widget.TextView;
public class MarqueeText extends TextView{
public MarqueeText(Context context) {
super(context);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean isFocused() {
return true;//返回true 使得其有textview具有Focused属性
}
}
这个时候 在activity_main.xml中引入这个方法,代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<com.example.paomadeng.MarqueeText <!-- 原来的textview 变成刚才新建类的路径名 -->
android:id="@+id/textview1"
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/hello_world" />
<com.example.paomadeng.MarqueeText
android:layout_below="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/hello_world" />
</RelativeLayout>
好了打开安卓虚拟机,这个时候看到两个textview都已经具有跑马灯的效果了,用了这个方法就能使得多个textview具有跑马灯的效果了。