美文网首页跑马灯
Android__TextView跑马灯的实现

Android__TextView跑马灯的实现

作者: LollipopX | 来源:发表于2016-07-23 00:49 被阅读0次

    首先给TextView添加一个单行限制:
    android:singleLine="true"

    - 解决方案一
    更改TextView的一个属性:
    android:ellipsize="marquee"
    即省略多余部分的意思,包括去掉省略号(然而我在Android 6上面并没有省略省略号)。

    然而,该有的东西都被省略了。不满意。

    - 解决方案二
    在方案一的基础上。添加如下两个属性:
    android:focusable="true" android:focusableInTouchMode="true"
    这样可以实现当行的循环跑马灯。

    然而,如果同时有两个类似的TextView出现时,会发现只有一个有跑马灯的效果,另一个则失效,因此该功能也是不够的。

    - 解决方案三
    在之前两个方案的基础上,自己对TextView进行改写。
    1.先新建一个类,比如MarqueeText.java ,且这个类继承了TextView。
    只会我们对这个类进行如下的改写,添加所需的几个构造函数。
    2.要对isFocused()进行重写,使返回值都为true。
    这是因为,之前的TextView控件在使用时,第一个标签默认获取的了焦点,而之后的TextView则失去了焦点,因而不能实现跑马灯效果。
    3.如果想要一直循环的话,应该加上android:marqueeRepeatLimit="marquee_forever"。否则循环两次。
    之后layout中,可以直接使用包名作为新的标签,如 <com.example.Marquee>,直接可实现跑马灯效果。

    public class MarqueeText extends TextView { public MarqueeText(Context context) { super(context); } public MarqueeText(Context context, AttributeSet attrs) { super(context, attrs); } public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean isFocused() { return true; } }

    - 总结

    1. 更改TextView的一个属性:
      android:ellipsize="marquee"
    2. 添加如下两个属性:
      android:focusable="true"
      android:focusableInTouchMode="true"
      3.新建一个类继承了TextView的类,并重写isFocused()使默认返回true。
      4.加上android:marqueeRepeatLimit="marquee_forever"可以一直循环,否则默认循环两次。

    相关文章

      网友评论

        本文标题:Android__TextView跑马灯的实现

        本文链接:https://www.haomeiwen.com/subject/siwijttx.html