今天练习的时候想实现一个文字的跑马灯效果,本来想自己手动实现的,不过突然想起来android里的TextView属性似乎自带了这个效果,叫: android:ellipsize ,平时都是把它的属性值设置成 end ,表示文字超出了一定的范围就显示省略号,如果要实现跑马灯的效果,就需要将它的属性值设置成 marquee ,就是:  android:ellipsize="marquee"  。我只记得它有这么个属性值,但是从来没用过,今天真正用了一次才发现这个属性值并没有那么简单:

按照惯例,一般用到这个属性值,就说明文字的长度超过了TextView的长度,而且一般都是在单行文本中进行滚动显示的。所以我先将TextView的属性设置如下:

<TextView
android:layout_width="100dip"
android:layout_height="wrap_content"
android:text="请使用手机扫描二维码,然后连接设备请使用二维码扫描手机,然后连接设备请使用二维码扫描手机,然后连接设备请使用二维码扫描手机,然后连接设备"
android:ellipsize="marquee"
android:singleLine="true"
/>

按照我的理解,文本长度是肯定会超过TextView的显示长度的,而我也确实将TextView设置成单行, android:ellipsize 的属性值指定为 marquee 了,但遗憾的是在手机上跑起来并没有任何的效果。没办法,只能求教于百度,网上的说法有很多,大概有以下几种:

第一种做法:新建一个继承于TextView的自定义View,重写其方法

参考链接:https://blog.csdn.net/shanshan_1117/article/details/78616901

这种方法我没有试,或许可行,但我很不喜欢,既然android自带了这个属性,直接用这个属性就好了,为了实现一个效果(这个效果还是系统自带的)还要去新建一个View,得不偿失。

第二种做法:在xml文件中指定 android:textIsSelectable="true" 或是在代码中设置 setSelected(true)

参考链接:https://www.cnblogs.com/ufreedom/p/4248142.html

这位博主写了很多,也分析了很多,最终结论就是上面的两种办法,说实话我挺佩服他的,能钻研的这么细(换做是我可能就自定义一个View了。。。我也只是在实在没办法的时候才去看源码),于是照着他的办法试了下,给TextView添加了 android:textIsSelectable="true" 属性,满心欢喜的跑了一下看了下效果,结果还是没有用。。。也许这位博主的办法确实有用,只是我的手机太特殊了(华为P10)。

第三种做法:在xml文件中同时指定 android:focusable="true" 和 android:focusableInTouchMode="true" 

参考链接:https://www.cnblogs.com/Gaojiecai/p/3142783.html

这位博主同样也写了很多,也列举了好几种情况,有些办法甚至于还要在TextView上加 android:clickable="true"  ,感觉怪怪的,我在手机上跑了下,同样也不行,无法实现跑马灯的效果。但是,需要特别说明的是,这种办法其实是有效的,如果直接在手机上跑,跑马灯效果确实是没有,但我手头刚好有一个USB口的遥控器,可以通过上下导航键选中到TextView,如果是通过遥控器上的上下导航键选中这个TextView,那么这个TextView的跑马灯效果就显示出来了,但是我们用的是手机,进来的时候就要显示。

其它做法:在代码中对TextView进行修改

这种做法的链接就不贴了,网上有很多,但还是那个问题,设置一个TextView的效果,还要分别在XML和代码中分别定义,个人实在是不喜欢。

我的做法:

仔细看了下第三种做法中博主的描述,大概觉得,要想使TextView拥有跑马灯的效果,那么这个TextView就一定要能够获取到焦点,于是我在它的做法上进行了修改:

<TextView
android:layout_width="200dip"
android:layout_height="wrap_content"
android:text="请使用二维码扫描手机,然后连接设备请使用二维码扫描手机,然后连接设备请使用二维码扫描手机,然后连接设备请使用二维码扫描手机,然后连接设备"
android:ellipsize="marquee"
android:singleLine="true"
android:focusableInTouchMode="true"
>
<requestFocus/>
</TextView>

再次运行试了下,跑马灯效果有了:

我反复试了下,这个 android:focusableInTouchMode="true" 属性是必须的, android:focusable="true" 属性却不是必须的。

最后,需要声明下,我也只是在我的手机下(华为P10)运行通过,别的手机我没有试过,我相信上面的几位博主肯定也是在各自的手机上试过了才会发表博文的,android手机众多,我也不敢保证自己的做法一定在所有的手机上都有效。

TextView: android:ellipsize="marquee" 跑马灯效果无效的问题的更多相关文章

  1. android:ellipsize实现跑马灯效果总结(转)

      最近无意间看到了涉及到跑马灯效果的代码,于是在网上查阅了很多资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会. 让我们一步步逐渐向下. 首先我们要实现走马灯这样一个效果,通常来说 ...

  2. android:ellipsize实现跑马灯效果总结

    最近无意间看到了涉及到跑马灯效果的代码,于是在网上查阅了很多资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会. 让我们一步步逐渐向下. 首先我们要实现走马灯这样一个效果,通常来说都是 ...

  3. Android TextView 横向滚动(跑马灯效果)

    Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...

  4. android中实现跑马灯效果以及AutoCompleteTestView与MultiAutoCompleteTextView的学习

    跑马灯效果 1.用过属性的方式实现跑马灯效果 属性:                  android:singleLine="true" 这个属性是设置TextView文本中文字 ...

  5. android 怎么实现跑马灯效果

    自定义控件 FocusedTextView, 使android系统误以为它拥有焦点 public class FocusedTextView extends TextView { public Foc ...

  6. Android 自定义View跑马灯效果(一)

    今天通过书籍重新复习了一遍自定义VIew,为了加强自己的学习,我把它写在博客里面,有兴趣的可以看一下,相互学习共同进步: 通过自定义一个跑马灯效果,来诠释一下简单的效果: 一.创建一个类继承View, ...

  7. Android textView点击滚动(跑马灯)效果

    布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...

  8. marquee跑马灯效果的相关属性

    介绍HTML设置滚动文字marquee的相关属性 ㈠文字滚动标签 设置文字滚动使用<marquee></marquee>标签,可以再标签里面设置字体的颜色,字号,字体大小等. ...

  9. Android学习总结——TextView跑马灯效果

    Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须 ...

随机推荐

  1. World发布博客测试

    姓名 地址 博客 www.bk.com  插入一个单元格并放入代码 using System; using System.Collections.Generic; using System.Linq; ...

  2. JSON空值处理与 StringUtils工具类使用

    JSON 动态查询时,需要的条件本应是null,前端传入的是" " //null转换为"" private static ValueFilter filter ...

  3. pdftk - handy tool for manipulating PDF 免费的pdf合并工具

    Linux pdf合并的工具 安装工具 $ sudo apt-get install pdftk 使用 $ pdftk *.pdf cat output all-in-one.pdf &&am ...

  4. VS无ADO.NET实体数据模型?

    今天做EF的小例子时,发现需要添加实体数据模型,但是不管怎么找在新建项中都找不到这个选项,这是怎么回事,于是就开始百度吧,有的说可能是VS安装时没有全选,也有的人说可能是重装VS时,没有将注册表清除, ...

  5. Bias vs. Variance(1)--diagnosing bias vs. variance

    我们的函数是有high bias problem(underfitting problem)还是 high variance problem(overfitting problem),区分它们很得要, ...

  6. 使用Jackson的@JsonFormat注解时出现少了 8 个小时

    比如数据库存的日期是2018-01-05,转成json则变成了2018-01-04 解决办法: @JsonFormat(pattern="yyyy-MM-dd") public D ...

  7. Oracle 分区表中本地索引和全局索引的适用场景

    背景 分区表创建好了之后,如果需要最大化分区表的性能就需要结合索引的使用,分区表有两种索引:本地索引和全局索引.既然存在着两种的索引类型,相信存在即合理.既然存在就会有存在的原因,也就是在特定的场景中 ...

  8. Oracle 解决无法生成Snapshot问题

    1. 概述 Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  9. 汇编语言笔记 CALL和RET指令

    转载地址:http://www.cnblogs.com/dennisOne ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程 ...

  10. mysql 时区更改;5.7 弱口令

    一.mysql 更改表名称: show databases; use 库名; show tables; rename table 旧表名 to 新表名: 示例: rename table old to ...