TextView中ellipsize属性焦点异常处理
android:ellipsize 被用于处理文本过长时候的显示,默认有5种方案,以“happy new year”为例简单说明:
android:ellipsize="start" ———— 省略开头,“...w year”,
android:ellipsize="end" ———— 省略结尾,“happy...”,
android:ellipsize="middle" ———— 省略中间,“ha...ear”,
android:ellipsize="marquee" ———— 跑马灯,没有获取焦点时省略结尾,但与“end”不同,只有两个点,“happy..”,获取焦点后开始滚动,默认滚动三次,
android:ellipsize="none" ———— 不做处理。
与之对应的也可以在代码里面设置:
setEllipsize(TextUtils.TruncateAt.START);
setEllipsize(TextUtils.TruncateAt.END);
setEllipsize(TextUtils.TruncateAt.MIDDLE);
setEllipsize(TextUtils.TruncateAt.MARQUEE);
使用注意事项:
a. android:ellipsize="marquee"需要同时设置android:singleLine="true",而不是android:maxLines="1"。
b.系统在英文环境下,android:ellipsize="marquee" 获取焦点前只会显示一个点。
c.默认显示3个点,选中显示跑马灯效果的处理。
方案一:
监听OnFocusChangeListener,获取焦点前设置“end”,获取焦点后设置"marquee",
一般情况下可以这样处理,但是如果是在子View里面这样写,会导致父View焦点和选中状态异常。所以涉及到焦点问题时,推荐第二种方案。
方案二:
重写TextView的setSelected方法,isSelected()为true时设置为"marquee",否则设置“end”。
更多相关文章
- Android APK常驻内存解决方案
- android 横屏重启的解决方案
- Android开发网站被封解决方案
- 《Android音频焦点机制深入理解》
- Android取消EditText自动获取焦点
- Android开发错误——Android Studio中遇到过的错误问题与解决方
- 最新版 Android SDK 无法获取SDK包 的解决方案
- Android TV webview禁止自动获取焦点 遥控器按键监听 dispatchKe
- Android处理屏幕旋转时的解决方案