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",

TextView中ellipsize属性焦点异常处理_第1张图片

一般情况下可以这样处理,但是如果是在子View里面这样写,会导致父View焦点和选中状态异常。所以涉及到焦点问题时,推荐第二种方案。

方案二:

重写TextView的setSelected方法,isSelected()为true时设置为"marquee",否则设置“end”。

TextView中ellipsize属性焦点异常处理_第2张图片

你可能感兴趣的:(TextView中ellipsize属性焦点异常处理)