Android(安卓)跑马灯效果auto scroll textview简化设置和解决焦点获取问题
16lz
2021-12-04
在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代码中,就正常使用就行,不用再重新写获取焦点的代码了。
更多相关文章
- Android(安卓)组件长宽比重设置总结
- TextView跑马灯效果
- 跟大家分享下Android布局文件layout.xml的一些属性值。
- 《第一行代码--Android》读书笔记之UI篇
- Android(安卓)各种布局 控件内部属性大全|我是记不住了搞下来看
- Android主题设置为@android:style/Theme.Dialog报错解决办法
- Android(安卓)TextView跑马灯效果
- Android中EditText的使用总结
- android:layout_gravity 和 android:gravity 的区别