Android中长TextView实现跑马灯效果

来源:互联网 发布:白金数据 豆瓣 书 编辑:程序博客网 时间:2024/04/28 02:34
在Android开发中有时候我们会在一个TextView中输入较长的字符串,当输入较长字符串时手机屏幕可能会无法完全显示文本的内容。例如:
<TextView        android:id="@+id/textview1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="长的TextView,长的TextView,长的TextView,长的TextView"        />
这样一个TextView的内容一行显示不全,系统默认情况下会自动换行,为了不让文本自动换行我们需要加一条属性:
 android:singleLine="true"

这样我们的文本就会只在一行中显示了,但是执行完效果后会发现不完全显示的文本会显示省略号,可以通过添加

android:ellipsize="marquee"

属性设置,此时可以解决省略号的问题,但是并不能实现跑马灯的效果,如果想要实现跑马灯的效果还需要加上两条属性

android:focusable="true"android:focusableInTouchMode="true"

这样就可以实现跑马灯效果了。但是,你以为这样就完了,错了,此时让我们把布局设置的稍微复杂一点,在文本框下再添加一个文本框同样按上边的文本框进行设置,运行后你会发现:理想很丰满,现实很骨感。 第二个文本框并不会显示跑马灯效果,很多小伙伴感到很诧异,这是为啥 呢?很简单第一个文本框设置的属性android:focusable="true"此时的焦点已经放到了第一个文本框上,返回为true,所以第二个文本框设置的焦点属性就不管用了,此时我们要想别的办法让两个文本框都能获得焦点,我告诉大家一个方法,自己重写一个TextView组件,代码如下:

public class MyTextView extends TextView {    public MyTextView(Context context) {        super(context);        // TODO Auto-generated constructor stub    }    public MyTextView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        // TODO Auto-generated constructor stub    }    public MyTextView(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub    }    @Override    public boolean isFocused() {        // TODO Auto-generated method stub        return true;    }}

然后将TextView组件换成自己重写的MyTextView即可完美解决了。
ok 拜拜 有兴趣的小伙伴自己试试吧!

0 0
原创粉丝点击