TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" 2.设置可滚到,或显示样式:android:ellipsize="marquee" 3.TextView只有在获取焦点后才会滚动显示隐藏文字,因此需要在包中新建一个类,继承TextView。重写isFocused方法,这个方法默认行为是,如果TextView获得焦点,方法返回true,失去焦点则返回false。跑马灯效果估计也是用这个方法判断是否获得焦点,所以把它的返回值始终设置为true。
以下转自他人:
Java语言: AlwaysMarqueeTextView 类

publicclassAlwaysMarqueeTextViewextendsTextView{

publicAlwaysMarqueeTextView(Contextcontext){
super(context);
}

publicAlwaysMarqueeTextView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}

publicAlwaysMarqueeTextView(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}

@Override
publicbooleanisFocused(){
returntrue;
}

在布局XML文件中加入这么一个AlwaysMarqueeTextView,这个加入方法也是刚刚学的。

XML语言: layout.xml <com.examples.AlwaysMarqueeTextView
android:id= “@+id/AMTV1″
android:layout_width= “fill_parent”
android:layout_height= “wrap_content”
android:lines= “1″
android:focusable= “true”
android:focusableInTouchMode= “true”
android:scrollHorizontally= “true”
android:marqueeRepeatLimit= “marquee_forever”
android:ellipsize= “marquee”
android:background= “@android:color/transparent”
/>

ellipsize属性
设置当文字过长时,该控件该如何显示。有如下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯的方式显示(动画横向移动)

marqueeRepeatLimit属性
在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为marquee_forever时表示无限次。

focusable属性
自己猜测的,应该是能否获得焦点,同样focusableInTouchMode应该是滑动时能否获得焦点。

组合View的问题:

XML语言: 组合View < LinearLayout
xmlns:android = “http://schemas.android.com/apk/res/android”
android:orientation = “vertical”
android:gravity = “center_vertical”
android:background = “@drawable/f_background”
android:layout_width = “fill_parent”
android:focusable = “true”
android:layout_height = “50px” >
< TextView

android:id = “@+id/info_text”
android:focusable = “true”
android:layout_width = “fill_parent”
android:layout_height = “wrap_content”
android:text = “test marquee .. “
android:textColor = “@color/black”
android:singleLine = “true”
android:ellipsize = “marquee”
android:marqueeRepeatLimit = “3″
android:textSize = “18sp”
/>
< TextView

android:id = “@+id/date_text”
android:layout_width = “fill_parent”
android:layout_height = “wrap_content”
android:layout_gravity = “bottom”
android:textColor = “@color/gray”
android:text = “2010/05/28″
android:textSize = “12sp”
/>
</ LinearLayout >

上面示例中2个TextView组合为一个View,由于设置了LinearLayout为focusable而TextView就没法取得焦点了,这样 这个TextView的跑马灯效果就显示不出来,就算你也设置TextView的android:focusable="true"也是 没用的. 这个时候就要使用addStatesFromChildren 这个属性了,在LinearLayout中设置这个属性,然后设置TextView的focusable="true"就可以了.关于 addStatesFromChildren的说明:

Sets whetherthisViewGroup's drawable statesalso include its children's drawable states.

From:http://hmifly.blog.163.com/blog/static/1285835072011322352406/

更多相关文章

  1. Android中LocationManager的简单使用,获取当前位置
  2. Android中gravity和weight參數的用法
  3. Android线程优先级设置方法
  4. Android界面编程——对话框控件(四)
  5. Android(安卓)应用没有桌面图标
  6. android之Layout(一)
  7. Android中GridView使用
  8. Android——四种AterDialog
  9. Android(安卓)Google Map(create md5, create google map key)

随机推荐

  1. mysql触发器之创建多个触发器操作实例分
  2. mysql触发器之创建使用触发器简单示例
  3. 如何将mysql存储位置迁移到一块新的磁盘
  4. windows下安装mysql-8.0.18-winx64的教程
  5. mysql视图之管理视图实例详解【增删改查
  6. mysql触发器简介、创建触发器及使用限制
  7. mysql视图之确保视图的一致性(with check
  8. mysql视图之创建视图(CREATE VIEW)和使用限
  9. mysql视图之创建可更新视图的方法详解
  10. MySql数据库中的子查询与高级应用浅析