内容摘要
该控件能够应用于内容资讯展示的功能模块中,如:腾讯和新浪微博的微博列表,微信朋友圈及其它社交类应用的好友动态展示列表等;实现了类似腾讯微博的微博列表展示功能,包含微博文本内容,表情,图片,话题和用户可点超链接等(请参见如下效果图)。该功能在实际项目开发中非常常见,除微博应用外,微信的朋友圈,陌陌、QQ空间的好友动态等也都有类似功能
- RecyclerView使用和嵌套问题
- 动态设置图片网格宽高
- 正则表达式的使用
- Linkify实现自定义超链接
- TextView富文本显示
- 点赞动画渐变动画效果
效果图
列表的item布局文件
|
|
item中的RecyclerView用于显示0-9张图片,根据服务器返回的图片数量不同显示的行列数和图片的大小也不同,需要动态设置,由于这个列表是RecyclerView,item中也使用了RecyclerView,这就产生了RecyclerView的嵌套
id为tv_content的TextView用于显示内容,内容中包含了表情图片和超链接
json数据格式
|
|
对应的实体类
|
|
动态设置图片宫格数
根据图片的数量,动态设置RecyclerView的列数和宽度
- 如果图片数量为0,则隐藏RecyclerView
- 如果图片数量为1,RecyclerView列数设为1列,宽度设为WRAP_CONTENT
- 如果图片数量为4,RecyclerView列数设为2列,宽度设为两个图片宫格的宽度
- 其它,RecyclerView列数设为3列,宽度设为MATCH_PARENT
|
|
动态设置图片的大小
- 1张图片,宫格的宽高为图片的宽高
- 其它情况,宫格的宽高为屏幕宽度的三分之一
|
|
自定义FlowLayout实现九宫格图片控件
|
|
布局文件
|
|
使用
|
|
TextView富文本显示
显示文本中的表情,把文本中如[呲牙][偷笑][偷笑]
的文字替换成表情图片,实现TextView的富文本显示(图文混排)。需要用正则去匹配文本中是否包含表情,匹配成功,表示文本中包含表情,用ImageSpan封装表情图片,再ImageSpan将设置给SpannableString,把文本中的表示表情的文字替换掉,最后将SpannableString设置给TextView即可。
正则参考:
|
|
|
|
让文字显示颜色
|
|
让图片和文字一起显示
|
|
设置超链接
|
|
让某段文字可以被点击并自定义点击的逻辑操作
|
|
|
|
自定义超链接
关于TextView 网页,电话,邮箱的自动识别。设置android:autoLink="email|web|phone|map"
属性后,TextView 可自动识别电话、邮箱、网址、地图为超链接。
|
|
添加自定义超链接,把内容中如@冷笑话精选
、#编程#
、#讲故事#
的文本显示为超链接,高亮显示并支持点击。先使用Linkify.MatchFilter 匹配过滤器过滤内容中的超链接,TextView在显示的内容要识别链接时,调用Linkify.addLinks()
|
|
设置自定义的链接后,点击超链接后会出错。 因为没有找到Activity可以处理发起的Intent, 需要定义两个Activity来接收意图中的参数。
当点击超链接的时候,会调起/启动一个与Linkify.addLinks()方法中的scheme对应的Activity
|
|
|
|
在清单文件中配置以上Activity,给Activity设置action、category、data
|
|
点赞动画
在MainActivity的布局文件中,有一个TextView,是用来执行点赞后的+1的动画(向上平移,透明度变小,放大)。 该控件开始时隐藏,执行点赞动画时,注意不是列表项中的控件执行动画。
|
|
|
|