今天练习的时候想实现一个文字的跑马灯效果,本来想自己手动实现的,不过突然想起来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. linux kernel相关学习资料的收集与周边

    <<linux内核设计与实现>>读了一遍.穿线作用比较好. 收获一个网站,和三本书 https://kernelnewbies.org/ https://book.douban ...

  2. [ipsec] 特别硬核的ike/ipsec NAT穿越机制分析

    〇 前言 这怕是最后一篇关于IKE,IPSEC的文字了,因为不能没完没了. 所以,我一直在想这个标题该叫什么.总的来说可以将其概括为:IKE NAT穿越机制的分析. 但是,同时它也回答了以下问题: ( ...

  3. css详解4

    1.固定定位 固定定位,页面内容多,页面滚动起来,才能看到固定定位效果. 比如下面这个,随之滚动条滚动它一直在右边.比如固定导航栏,小广告,回到顶部,应用在这些地方.一直固定位置不变的. 首先让页面能 ...

  4. linux上如何删除文件名乱码的文件

    这里写图片描述今天在服务上发现了两个文件名是乱码的文件,如图所示.这里写图片描述于是想用rm命令把它们删掉,但提示没有此文件. 网上搜了一下,找到解决方法,首先执行ls -i命令,此时在文件前面会出现 ...

  5. 手写热更新阐述tinker实现原理

    关于热更新如今面试也是基本上都会提及到的,我上一家公司用的是tinker,而这里准备研究的也是它的原理,而关于tinker的原理网上也是一大堆文章进行介绍,为了对它有个更加进一步的认识,所以自己动手来 ...

  6. Webpack快速入门

    什么是Webpack 顾名思义它是一个前端打包工具,通过给定的入口文件自动梳理所有依赖资源(包括css.图片.js等),并按照配置的规则进行一系列处理(转es5.压缩等),打包生成适合现代生产环境要求 ...

  7. APP弱网测试工具(QNET)

    QNET介绍官网链接:https://wetest.qq.com/product/qnet 目前在测试移动设备上进行弱网络专项测试的方案主要有两种: 通过Android设备连接到PC上进行弱网络测试, ...

  8. Java - 框架之 Spring

    一. IOC 和 DI IOC : 控制反转,将对象的创建权反转给了 Spring.DI  : 依赖注入,前提是必须要有 IOC 的环境,Spring 管理这个类的时候将类的依赖的属性注入(设置)进来 ...

  9. dede5.7评论框不显示,文章页表情不显示,解决办法

    dede5.7评论框不显示,文章页表情不显示,解决办法 进入dede后台,系统-系统基本参数-其它选项,找到模板引擎禁用标签,去掉里面的php,如图 进入dede模板目录,默认是/templets/d ...

  10. Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest

    链接: https://codeforces.com/contest/1265/problem/C 题意: So the Beautiful Regional Contest (BeRC) has c ...