今天练习的时候想实现一个文字的跑马灯效果,本来想自己手动实现的,不过突然想起来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. curl-手册

    Manual -- curl usage explained Related: Man Page FAQ LATEST VERSION   You always find news about wha ...

  2. kubernetes之pod健康检查

    目录 kubernetes之pod健康检查 1.概述和分类 2.LivenessProbe探针(存活性探测) 3.ReadinessProbe探针(就绪型探测) 4.探针的实现方式 4.1.ExecA ...

  3. (Linux基础学习)第二章:CentOS7.4安装教程

    001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 ...

  4. react navtagion 头部有返回按钮 标题不居中解决方法

    头部右边写一个隐藏的组件 hederRight:( <View><View> )

  5. php 递归算法

    通过递归实现阶乘 function multi($n){ if($n == 0){ return 1 ;//终止递归 } $value = $n * multi($n-1); return $valu ...

  6. win32gui.EnumWindows

    python2 import win32gui, win32con, win32api import time, math, random def _MyCallback( hwnd, extra ) ...

  7. mysql导出PDM文件步骤

    打开mysql把表导出成sql文件(如:service.sql) powerdesigner:选择 File--->Reverse Engineer--->Database 重命名(mod ...

  8. Oracle instr() 字符查找函数

    instr()函数的格式  (俗称:字符查找函数) 格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串) 格式二:instr( string1 ...

  9. ASM磁盘组的监控

    ASM磁盘组的监控可以使用oracle数据库查询,需要使用到的是sql语句和oracle数据库的相关操作. 还可以使用命令行进行查询,然后用awk进行文本拆分,拿到需要的值.这个需要使用到的是sudo ...

  10. Cogs 876. 游戏(DP)

    游戏 ★ 输入文件:game1.in 输出文件:game1.out 简单对比 时间限制:1 s 内存限制:128 MB USACO/game1 A Game游戏 译 by 肖遥 描述 有如下一个双人游 ...