TextView实现跑马灯效果

Android系统中TextView实现跑马灯效果,必须具备以下几个条件:

1、android:ellipsize=”marquee”
2、TextView必须单行显示,即内容必须超出TextView大小
3、TextView要获得焦点才能滚动
 
实现代码:

xml:

android:singleLine="true" //单行显示
android:ellipsize="marquee" //跑马灯显示(动画横向移动)
android:marqueeRepeatLimit="marquee_forever"//永久滚动
android:focusable="true" //控件是否能够获取焦点
android:focusableInTouchMode="true" //是否在触摸模式下获得焦点

 

   当我们需要多个TextView实现跑马灯效果时,上面的方法就不管用了,因为它获取不到焦点了。所以就需要自定义一个TextView,继承TextView,并且重写isFocuse()方法,让它永远返回true,这样跑马灯效果就能一直的跑起来了。


补充:

1.android:ellipsize属性:

android:ellipsize="start"              省略号在开头 
android:ellipsize="middle"           省略号在中间 
android:ellipsize="end"                省略号在结尾 
android:ellipsize="marquee"        跑马灯显示

 

2.在Android Studio中,TextView单行显示:singleline语句已废弃不推荐使用,可以替换为 maxLines="1",but我换了之后跑马灯无法实现,下面来看看这两个属性的区别:

    从字面意思理解,这两个都是限制Text的行数。那么singleLine="true" 和maxLine="1" 都是限制为一行,but,maxLines 是在限制高度, singleLine 是强制不让换行。从高度来讲是一样的,两者肯定都显示一行,但从换行的位置来讲就有区别了,maxLines并不会改变其换行的位置,而singleLine则会。从这个角度讲,singleLine的显示会好一些,因为如果超过一行singleLine会在一行内显示,后面加上"...",而maxlines="1" 则不会,它依然会在原来换行的位置换行,所以有时候一行不满,但是却不显示剩下的部分。

    网上查资料之后,可能是maxLine与ellipsize配合失效。

3. maxLines 与ellipsize 搭配使用: 导致ellipsize失效。

 lineSpacingExtra 和ellipsize搭配使用: 
导致垂直居中无效。 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值