当前位置: 首页 > article >正文

Android TextView设置跑马灯失效

1.关于问题

TextView失效在网上有详细的解决方案,大部分时候都能够很好的解决问题

下面给出网上的解决方案:

<TextView
    android:layout_width="100dp"
    android:layout_height="22dp"
    tools:text="水浇地放松放松开发的开始放假考试的飞机开了撒酒疯恐龙时代解封了开始的"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:singleLine="true"
    android:textSize="13sp"
    android:textColor="@color/black"/>

以上就是一个简单的固定宽高的TextView,显然文字的长度超过了控件的宽度

ellipsize属性官方给出的解释如下:

 意思就是使文本中比视图宽度长的单词省略号,而不是在在中间断开。

该属性的枚举值为

public enum TruncateAt {
    START,
    MIDDLE,
    END,
    MARQUEE,
    /**
     * @hide
     */
    @UnsupportedAppUsage
    END_SMALL
}

主要是设置省略号的位置,而其中MARQUEE就是本文要学习的跑马灯效果

2.跑马灯效果

除了在XML布局文件中设置如下属性

android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"

还需要在代码中设置属性,动态设置的目的是为了请求焦点,在界面刷新的时候也能正常展示跑马灯效果

val textView= findViewById<TextView>(R.id.textView)
textView.text = "放假恐龙时代减肥路上看见发了康师傅就开始两地分居老师到家了客服就是"
textView.ellipsize = TextUtils.TruncateAt.MARQUEE
textView.isSingleLine = true
textView.isSelected = true
textView.isFocusable = true
textView.isFocusableInTouchMode = true

3.特殊情况下的处理

以上是结合官方文档说明和网上大多数解决问题的方案得来的,正常情况下可以完美运行

问题1

当前页面存在多个TextView的情况失效:

相信很多同学在开发过程中都遇到过该问题,尤其是RecyclerView和Adapter结合展示列表,

字符串过长要完整展示的情况很多

如果此时出现了刷新才能展示跑马灯或者部分Item跑马灯效果失效,只显示省略号,

这种情况基本都是控件绘制或者刷新未完成的情况下,设置的跑马灯属性失效,解决方案如下

val textView= findViewById<TextView>(R.id.textVuew)
textView.post {
    textView.text = "放假克里斯多夫就流口水地方康师傅就是了对方开始减肥就是放假克里斯多夫就凉快"
    textView.ellipsize = TextUtils.TruncateAt.MARQUEE
    textView.isSingleLine = true
    textView.isSelected = true
    textView.isFocusable = true
    textView.isFocusableInTouchMode = true
}

控件增加post方法的回调,类似于一个Handler,把控件的刷新和绘制结果通过post方式发送到主线成。

问题2

给TextView设置动态文本,文本内容变化的时间未知,设置定时器给TextView设置文本,导致文本跑马灯在未完成的情况不断重置

这种情况,需要缓存当前文本内容,只有在文本内容发生改变是才设置,否则相同的文本,用定时器设置时会不停重置跑马灯动画。


http://www.kler.cn/a/291558.html

相关文章:

  • 三维测量与建模笔记 - 点特征提取 - 4.3 Harris特征点
  • [Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
  • vue实现展示并下载后端返回的图片流
  • 2024年11月16日 星期六 重新整理Go技术
  • 4.2 Android NDK 基础概念
  • 技术周总结 11.11~11.17 周日(Js JVM XML)
  • ACL实验配置学习笔记
  • 【网络安全 | 渗透工具】Cencys+Shodan使用教程
  • 科研绘图系列:R语言差异基因四分图(Quad plot)
  • 【轻松学EntityFramework Core】--数据迁移
  • 【高阶数据结构】B树、B+树、B*树
  • 手把手教ESP32连接阿里云
  • 如何在Centos7构建调试“Jmeter-InfluxDB-Grafana“?
  • Spring Boot 2.0 解决跨域问题:WebMvcConfiguration implements WebMvcConfigurer
  • 天气数据爬取
  • javascript利用for循环输出0-100的数
  • 印度数据中心关闭潮:DigitalOcean 为何成为中国企业的新选择
  • Linux操作系统中的进程查看与进程调度
  • vue学习记录七:监听属性watch
  • 力扣一百题——双指针题解
  • 常规流布局(补充)——WEB开发系列30
  • AIStarter:AI界的全能启动器【绘画、对话、写作、视频、换脸...】
  • echarts图表标题,层级,view表格,机型适配
  • 【机器人工具箱Robotics Toolbox开发笔记(四)】 机器人位姿变换之位姿变换函数
  • F - Pond Skater 矩阵 一个方向走k步。。最短路
  • 编译LineageOS模拟器镜像,导出到AndroidStudio