Android实现跑马灯效果总结

本文总结了在Android中实现TextView跑马灯效果的方法,包括设置android:ellipsize和android:singleLine属性,以及如何让TextView获取焦点以显示跑马灯效果。通过分析android:focusable和android:focusableInTouchMode属性,探讨了控件获得焦点的条件,并通过实验探讨了android:clickable与焦点的关系。
摘要由CSDN通过智能技术生成

android:ellipsize实现跑马灯效果总结

应老师号召了解到跑马灯效果的代码,于是在网上查阅了资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会。

首先我们要实现走马灯这样一个效果,通常来说都是在TextView这个控件中来实现的,而且其中的文字一定是单行显示,如果多行显示,那走马灯效果也就失去了存在的意义。另外,在EditText中使用走马灯没有必要,也不合理,实际上对于EditText来说android:ellipsize这个属性只有对于设置在android:hint中的文字的时候是有用的,而且android:ellipsize=”marquee”这个用法不能用在EditText控件上。对于在EditText用户输入的文字,android:ellipsize这个属性没有用处。

在TextView中实现我们的走马灯效果,需要两个属性android:singleLine=”true”,以及android:ellipsize=”marquee”,我们来看下面的代码:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  

    <TextView  
        android:layout_width="100dip"  
        android:layout_height="wrap_content"  
        android:layout_gravity="center"  
        android:text="走马灯效果的演示"   
        android:singleLine="true"  
        android:ellipsize="marquee"/>  

</LinearLayout>  

运行这段代码之后,我们会发现走马灯效果并没有显示出来,显示出的文字是不动的,实际效果如下:

这里写图片描述

这其中的原因在于跑马灯效果需要TextVIew获得当前的焦点(focus)。然而对于TextView这个控件来说,他的默认的Clickable,LongClickable,Focusable,FocusableInTouchMode这四个属性的值都是false,所以跑马灯效果也就不会出来了,即使你用手触摸TextView也是无法显示跑马灯的效果的。

解决这个问题我们就需要让我们的TextView得到焦点,这里主要涉及android:focusable和android:focusableInTouchMode这两个属性,简单来说把这两个属性都设置成true,那么在运行程序以后跑马灯效果就显示出来了。
android:focusable=”true”
android:focusableInTouchMode=”true”

但是细细品味这两个属性之后发现其中其实还是有一些玄机的:

1.。如果这两个属性设置成android:focusable=”true”以及android:focusableInTouchMode=”false”,那么会发现程序运行之后,走马灯效果没有出现,

这个时候需要用户按下手机,才能让走马灯的效果出现,这说明android:focusable是针对于手机按键有效的,然而根据api的解释,android:focusableInTouchMode是根据屏幕触摸决定的。

2。如果这两个属性设置成android:focusable=”false”与android:focusableInTouchMode=”true”,那么无论如何走马灯都出现不了了,就算加上android:clickable=”true”也不行,这说明 android:focusable=”true”是android:focusableInTouchMode=”true”能有效的先决条件,我推测可能是在源码实现中,android:focusableInTouchMode的逻辑是嵌套在android:focusable中的,这个有待于以后进一步的研究。。。

3。在把这两个属性都设置成true以后,会发现程序运行之后,走马灯效果自动就显现了出来,这说明应用在运行后,会自动地按照某种顺序(在这里应该是自上而下),

寻找第一个android:focusableInTouchMode=”true”这个属性有效的第一个控件,当然要使这个属性有效按照前面的讨论android:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值