在Android中TextView要实现跑马灯的效果,一般都是在xml文件中给TextView设置以下配置:

android:ellipsize="marquee" android:focusable="true" android:marqueeRepeatLimit="marquee_forever" android:focusableInTouchMode="true" android:scrollHorizontally="true"android:singleLine="true"

然后在java代码中,设置时,需要加上requestFocus方法,这样配置特别麻烦,而且在某些机型中,就算按照这样设置,如果在设置了文字之后,再改变文字的内容,或者期间做了其他操作,发现跑马灯效果失效了,没有再自动滚动。


所以我重写了一个TextView,简化了配置,并且解决了失效的问题。

代码如下:


import android.content.Context;import android.graphics.Rect;import android.text.TextUtils.TruncateAt;import android.util.AttributeSet;import android.widget.TextView;/** * 跑马灯效果TextView,简化了跑马灯的设置,解决某些机型焦点获取问题 * 创建时间:2015-8-26 上午10:32:11 * @author Miaozz. * */public class ScrollingTextView extends TextView {public ScrollingTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public ScrollingTextView(Context context, AttributeSet attrs) {super(context, attrs);init();}public ScrollingTextView(Context context) {super(context);init();}@Overrideprotected void onFocusChanged(boolean focused, int direction,Rect previouslyFocusedRect) {if (focused)super.onFocusChanged(focused, direction, previouslyFocusedRect);}@Overridepublic void onWindowFocusChanged(boolean focused) {if (focused)super.onWindowFocusChanged(focused);}@Overridepublic boolean isFocused() {return true;}private void init() {setEllipsize(TruncateAt.MARQUEE);// 对应android:ellipsize="marquee"setMarqueeRepeatLimit(-1);// 对应android:marqueeRepeatLimit="marquee_forever"setSingleLine();// 等价于setSingleLine(true)}}

在xml中,只需在xml文件中进行如下配置:
<com.demo.view.ScrollingTextViewandroid:id="@+id/tv_name"android:layout_width="800px"android:layout_height="wrap_content"/>

在java代码中,就正常使用就行,不用再重新写获取焦点的代码了。





更多相关文章

  1. Android(安卓)组件长宽比重设置总结
  2. TextView跑马灯效果
  3. 跟大家分享下Android布局文件layout.xml的一些属性值。
  4. 《第一行代码--Android》读书笔记之UI篇
  5. Android(安卓)各种布局 控件内部属性大全|我是记不住了搞下来看
  6. Android主题设置为@android:style/Theme.Dialog报错解决办法
  7. Android(安卓)TextView跑马灯效果
  8. Android中EditText的使用总结
  9. android:layout_gravity 和 android:gravity 的区别

随机推荐

  1. android sqlite 一次创建多个表
  2. Android(安卓)监控网络状态
  3. Android(安卓)子线程 更新 UI 界面 总结
  4. Android(安卓)判断程序是否在前台运行
  5. Android(安卓)异常后如何重启应用
  6. Android(安卓)Tips Round-Up, Part 5
  7. Android(安卓)中实现FlowLayout 布局
  8. Android中通过代码检测系统是否有root权
  9. android Camera 旋转 90 °问题
  10. android中drawable转bitmap的两种方法