TextView的跑马灯效果实现

问题描述

当文字内容过长,但是只允许显示一行时,可以将文字显示为跑马灯效果,即文字滚动显示。

代码实现

第一种方法实现

先查询TextView控件的属性,得到以下信息:

  • android:ellipsize=”marquee”
    TextView采用跑马灯属性.
  • android:marqueeRepeatLimit=”marquee_forever”
    设置重复滚动的次数,marquee_forever表示无限次.

在设置了上面两个属性之后,还需要设置两个属性,使得TextView可以获得焦点,滚动起来,不获取焦点,TextView并不会滚动。

  • android:focusableInTouchMode=”true”
    在Touch模式下可以获取焦点。
  • android:focusable=”true”
    TextView可以获取焦点。

TextView的设置属性如下:

<TextViewandroid:id="@+id/tv"android:layout_width="400dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:ellipsize="marquee"android:focusableInTouchMode="true"android:focusable="true"android:gravity="center"android:marqueeRepeatLimit="marquee_forever"android:singleLine="true"android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。"
/>

这种方法实现存在一个问题,就是当其他控件获取焦点之后,TextView没有了焦点,则会停止跑马灯效果。
在TextView控件下面添加一个EditText控件,当点击EditText控件时,EditText控件将会获得焦点,TextView将会失去焦点,代码如下:

    <TextViewandroid:id="@+id/tv"android:layout_width="400dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:ellipsize="marquee"android:focusableInTouchMode="true"android:focusable="true"android:gravity="center"android:marqueeRepeatLimit="marquee_forever"android:singleLine="true"android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_below="@id/tv"/>

运行代码之后,点击EditText,上面的TextView就会停止跑马灯效果,所以如果布局上有其他控件就不适合第一种方式。

第二种方法实现

通过修改TextView的isFocus()方法,使其返回为true,可以一直获取焦点。代码如下:

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

FocusTextView的使用为:

<com.zhangmiao.sixproject.FocusTextViewandroid:id="@+id/focus_tv"android:layout_width="400dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:ellipsize="marquee"android:gravity="center"android:marqueeRepeatLimit="marquee_forever"android:singleLine="true"android:layout_below="@id/tv"android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。"
/>

这种方式就不会有第一种方式的问题。

总结

第一种方式实现方便快捷,但是存在被其他控件夺取焦点之后效果消失的问题。
第二种方式需要实现一个类去继承TextView,重写isFocus()方法,没有第一种方式的问题。
推荐第二种方式。

联系方式:1006299425@qq.com,有问题欢迎大家指出。

转载于:https://www.cnblogs.com/zhangmiao14/p/8759282.html

TextView的跑马灯效果实现相关推荐

  1. TextView的跑马灯效果(AS开发实战第二章学习笔记)

    TextView的跑马灯效果 跑马灯用到的属性与方法说明 singleLine 指定文本是否单行显示 ellipsize 指定文本超出范围后的省略方式 focusable 指定是否获得焦点,跑马灯效果 ...

  2. android实现跑马灯效果,TextView实现跑马灯效果 就这么简单!

    一.方法 这里我们用两种方法来实现跑马灯效果,虽然实质上是一种 实质就是: 1.TextView调出跑马灯效果 2.TextView获取焦点 第一种: 1.TextView调出跑马灯效果 androi ...

  3. TextView实现跑马灯效果

    经常使用TextView会出现这样的情况,有限的空间内只能写一行,然后导致好多文字被"..."表示了,如图: 而且有可能是重要信息被隐藏了,于是就有了跑马灯效果. 实现方式很简单: ...

  4. Android studio | From Zero To One ——TextView实现跑马灯效果及聊天室、文字直播间

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  5. TextView跑马灯效果

    转载:http://www.2cto.com/kf/201409/330658.html 一.只想让TextView显示一行,但是文字超过TextView的长度怎么办? 在开头显示省略号 androi ...

  6. Android自定义不需要焦点的TextView以实现跑马灯效果

    使用原生的TextView实现"跑马灯"效果,需要特别注意其是否获取到了焦点(特别是程序当中有多个需要赋值的 Textview或进度条之类的需要改变其值的View);TextVie ...

  7. android:ellipsize = marquee 跑马灯,Android基于TextView属性android:ellipsize实现跑马灯效果的方法...

    本文实例讲述了Android基于TextView属性android:ellipsize实现跑马灯效果的方法.分享给大家供大家参考,具体如下: Android系统中TextView实现跑马灯效果,必须具 ...

  8. 圣诞节祝福小Demo:JingleBells背景音乐+礼物闪烁下落+跑马灯效果

    源码已经上传至我的github上:https://github.com/junmei520/MyChristmas 同时我在微博上也以视频的形式展示了Demo的运行效果:http://weibo.co ...

  9. Android TextView跑马灯效果与设置文字阴影

    TextView跑马灯效果的实现 自定义 一个TextView public class MusicDesText extends TextView {public MusicDesText(Cont ...

最新文章

  1. python isodd()判断奇偶_位运算(1的个数;2.判断奇偶)
  2. linux监控(陆续补充)
  3. copper实现图片的裁剪和上传(1)
  4. checkbox管理
  5. 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
  6. sense chrome扩展工具安装问题
  7. node express 学习笔记
  8. 图像检索中相似度度量公式:各种距离
  9. Debian耳机声音问题
  10. JDK 8中几乎命名的方法参数
  11. 实验 5 编写、调试具有多个段的
  12. 2012年12月第三个周末
  13. 盒子模型的各种高度记录
  14. 启动服务_用控制台启动一个wcf服务
  15. Vue.js(2.x)之插值
  16. linux deepin 15.9双系统,windows10安装双系统Deepin15.9遇到的坑
  17. 永磁同步电机转子磁链_采用冻结磁导率的瞬态场永磁同步电机交直轴电感计算...
  18. 十进制转十二进制-复试练习
  19. python表示倍数的英语句型_英语倍数表达法
  20. 自定义设置HTTP响应头

热门文章

  1. 【知识图谱】知识表示与知识建模
  2. python删除所有core文件_python – 从pandas.core.series.Series中删除前导零
  3. 二进制在计算机电路中得到广泛的应用,模拟电子和数字电子技术的区别及应用...
  4. php调用c语言库,使用C语言给php写扩展
  5. 极致无边界!2021 神策数据 Tech-Day 即将开幕
  6. 桑文锋的数据“长征”
  7. 再见,汉斯·罗斯林,你用数据让宏大的问题变有趣 | 好奇心小数据
  8. Linux编程 20 shell编程(shell脚本创建,echo显示信息)
  9. 关于Hexo6.0搭建个人博客(github+Google-收录篇)
  10. 解决:MVC对象转json包含\r \n