TextView中插入图片,图文混排

TextView中需要插入图片的话需要用到SpannableStringBuilder或者SpannableString + ImageSpan

SpannableString与SpannableStringBuilder区别,根据业务需要使用

简单点来说,SpannableString构造对象的之后再无法更改String的内容,也不能拼接内容;而SpannableStringBuilder可以通过其append()方法来拼接多个String。 
因为Spannable等最终都实现了CharSequence接口,所以可以直接SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView。这两个特殊地方就是多了setSpan()方法

void setSpan (Object what, int start, int end, int flags)

what: 各种span类型, 如:ImageSpan

start,end:图片取替文字的索引,图片代替文字

flags:图片对于其他文字的应用效果,用来标识在Span范围内的文本前后输入新的字符时是否把它们也应用这个效果

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE、Spanned.SPAN_INCLUSIVE_EXCLUSIVE、Spanned.SPAN_EXCLUSIVE_INCLUSIVE、Spanned.SPAN_INCLUSIVE_INCLUSIVE

INCLUSIVE表示应用该效果EXCLUSIVE表示不应用该效果,这些是组合意思

例如、Spanned.SPAN_EXCLUSIVE_INCLUSIVE 该图片

 

ImageSpan可是控制图文对齐方式

ALIGN_BASELINEALIGN_BOTTOM

实现步骤

 1.获取资源,生成Bitmap根据业务逻辑需要进行保存缓存

 
 

 2.处理对应emoji,根据需要可以选择是否用正则去匹配获取索引

最后把设置好的sb,settext进去TextView即可