相信大家经常看见下面的实现效果:
如果想要实现上面的效果,那么就要分下面几步:
1、判断文字内容有没有超过指定行数的高度,如果超过了显示伸展箭头,如果没超过则隐藏箭头;
2、对箭头进行监听,如果是伸展状态,则变为收缩状态;如果是收缩状态,则变为伸展状态;
3、根据文本控件的状态动态改变箭头的图标;
4、当文本内容发送改变时,依然能完美适配上述功能。
虽然只有简单的三步,但是如果没有一个清晰的对TextView的理解,可能就会卡在前两步中。在这里,我简要的提一下思路。源代码我已经封装为一个工具,一句代码就可调用。链接放在文章最下面。
1、首先根据TextPaint的measureText方法得到全部内容所占的像素宽度;然后在GlobalLayoutListener中得到TextView的width,否则在onCreate方法中得到的值为0;判断这两个值的大小,大小关系估计大家已经明白。
2、如果想设置TextView为具体行数加末尾省略,则需要setLines和setEllipsize方法配合使用;当然,取消行数限制显示全部内容也需要这两个方法进行配合。
3、根据TextView的伸缩状态值,动态的改变箭头的图标,这一步是最简单的一步。
4、当然,大家应该都明白了,有个监听器叫做TextWatcher。
思路介绍完毕,源代码放在这里,欢迎大家下载,如果有什么疑问,可以直接评论问我。
http://download.youkuaiyun.com/detail/cc_lova_wxf/9206853