Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)

Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天),第1张

概述AndroidRichText帮助实现像QQ,微信一样的,一个TextView里既有文字又有表情又有图片的效果,采用插件化的框架,代码简单,可拓展性强。

AndroIDRichText帮助实现像QQ,微信一样的,一个TextVIEw里既有文字又有表情又有图片的效果,采用插件化的框架,代码简单,可拓展性强。

基础框架包只有四个java文件,

Richtextwrapper :TextVIEw的包裹类,实现支持富文本,通过new Richtextwrapper(TextVIEw v)来构造。

RTMovementMethod: 继承自AndroID原生的linkMovementMethod,重写ontouchEvent方法,优化了ClickSpan(点击响应的文字区域)的点击响应。

 Resolver:一个接口,我们需要实现一种支持富文本类型时就只需要写一个相应的Resolver重写它的resolve方法,在resolve方法里实现所要实现的富文本样式。

RichTexts:一些公用方法、类、接口的集合。接下来简单介绍一下如何使用这个框架:

//直接根据TextVIEw new一个Richtextwrapper,之后所有的事情都可以用它完成;Richtextwrapper richtextwrapper = new Richtextwrapper((TextVIEw) findVIEwByID(R.ID.tv_main));//比如QQ希望在TextVIEw里同时有表情和图片那么就可以相应的写两个Resolver来实现分别的功能,直接在初始化时调用addResolver传入就可以。richtextwrapper.addResolver(ImageResolver.class,EmotionResolver.class);//同时,我们如果希望点击图片时有响应事件,可以使用setonRichTextListener来处理,参数要传入对应的Resolver,这里是ImageResolver,如果我们需要自定义的XXResolver处理的富文本效果实现响应事件,那么久传入XXResolver.class;richtextwrapper.setonRichTextListener(ImageResolver.class,new RichTexts.RichTextClickListener() {@OverrIDepublic voID onRichTextClick(TextVIEw v,String content) {//在这里可以进行图片的点击事件处理     //do something}});//最后直接把文本set进去就可以richtextwrapper.setText(content); 

addResolver可以传入任意个Resolver,让TextVIEw支持我们需要的富文本类型,如果需要取消支持某种富文本类型,只需要不传入该Resolver比如上文中如果只需要支持表情,那么 richtextwrapper.addResolver(EmotionResolver.class);
不需要做太多代码改动,比较灵活。

那么此外,大家可以看出来另一个关键的地方就是Resolver;Resolver是如何实现呢?这边使用一个Demo来简单示例:

public class ImageResolver implements Resolver {public static final String img_MATCH_REGulAR = "\[img](\w+)\[/img]";public static Pattern PATTERN = Pattern.compile(img_MATCH_REGulAR);//参数中的sp是该TextvIEw的content,extra是方便我们使用的一个附加的数据,默认是空的,我们如果希望从外面传入数据到这里面可以通过richtextwrapper.putExtra()来实现@OverrIDepublic voID resolve(final TextVIEw textVIEw,final Spannable sp,SparseArray<Object> extra,final RichTexts.RichTextClickListener Listener) {Matcher matcher = PATTERN.matcher(sp);final Context context = textVIEw.getContext();while(matcher.find()){String content = matcher.group(1);final RichTexts.TaggedInfo info = new RichTexts.TaggedInfo(matcher.start(),matcher.end(),content);if(Listener!=null) {RichTexts.RichTextClickSpan span = new RichTexts.RichTextClickSpan(Listener,info.content);sp.setSpan(span,info.start,info.end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}RichTexts.StickerSpan testSpan = new RichTexts.StickerSpan(context,R.drawable.icon,100,100);RichTexts.setimageSpan(sp,info,testSpan);textVIEw.postInvalIDate();}} 

上面的示例中,RichTextClickSpan是大家如果需要实现点击效果必须要用到的,而StickerSpan则是实现图像效果,以上一个可点击的图像的Resolver就实现了,当然上文中是随便传入一个icon,真实情况,大家需要自己根据内容以及所期待的效果自己再做些调整。

总结

以上是内存溢出为你收集整理的Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)全部内容,希望文章能够帮你解决Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1141974.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存