Android中长TextView实现跑马灯效果
16lz
2021-01-25
在Android开发中有时候我们会在一个TextView中输入较长的字符串,当输入较长字符串时手机屏幕可能会无法完全显示文本的内容。例如:
<TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="长的TextView,长的TextView,长的TextView,长的TextView" />
这样一个TextView的内容一行显示不全,系统默认情况下会自动换行,为了不让文本自动换行我们需要加一条属性:
android:singleLine="true"
这样我们的文本就会只在一行中显示了,但是执行完效果后会发现不完全显示的文本会显示省略号,可以通过添加
android:ellipsize="marquee"
属性设置,此时可以解决省略号的问题,但是并不能实现跑马灯的效果,如果想要实现跑马灯的效果还需要加上两条属性
android:focusable="true"android:focusableInTouchMode="true"
这样就可以实现跑马灯效果了。但是,你以为这样就完了,错了,此时让我们把布局设置的稍微复杂一点,在文本框下再添加一个文本框同样按上边的文本框进行设置,运行后你会发现:理想很丰满,现实很骨感。 第二个文本框并不会显示跑马灯效果,很多小伙伴感到很诧异,这是为啥 呢?很简单第一个文本框设置的属性android:focusable="true"
此时的焦点已经放到了第一个文本框上,返回为true,所以第二个文本框设置的焦点属性就不管用了,此时我们要想别的办法让两个文本框都能获得焦点,我告诉大家一个方法,自己重写一个TextView组件,代码如下:
public class MyTextView extends TextView { public MyTextView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override public boolean isFocused() { // TODO Auto-generated method stub return true; }}
然后将TextView组件换成自己重写的MyTextView即可完美解决了。
ok 拜拜 有兴趣的小伙伴自己试试吧!
更多相关文章
- 为什么要学习 Markdown?究竟有什么用?
- Android(安卓)5.0+ 自定义普通按钮的ripple波纹效果
- Android(安卓)仿2016版京东筛选
- Android(安卓)Facebook-Rebound弹性动画
- android入门-----dhcp服务(上)
- android 4.4 电池电量管理底层分析(C\C++层)
- Android学习笔记---自定义View#01
- Android(安卓)自定义属性研究
- Android(安卓)动画分析之翻转效果