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

 更新时间:2016年01月26日 10:23:43   作者:丙丁  
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() {
@Override
public 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()来实现
@Override
public 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中引用其他程序的文本资源超简单方法

    Android中引用其他程序的文本资源超简单方法

    这篇文章主要介绍了Android中引用其他程序的文本资源超简单方法,本文直接给出实现代码,需要的朋友可以参考下
    2015-01-01
  • 总结安卓(Android)中常用的跳转工具

    总结安卓(Android)中常用的跳转工具

    在大家日常开发的时候经常会用到各式各样的跳转,如跳转到QQ、微信聊天界面、跳转到联系人界面或者跳转到浏览器和照相机等等之类的,本文将常用到的一些跳转集合到一起,这样更方便大家以后使用,有需要的小伙伴们可以参考借鉴。
    2016-08-08
  • Android自定义Toast样式实现方法详解

    Android自定义Toast样式实现方法详解

    这篇文章主要介绍了Android自定义Toast样式,Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失!非常常用!本文就来通过一个例子把Toast的使用讲透
    2023-01-01
  • Flutter 开发一个登录页面

    Flutter 开发一个登录页面

    登录页面在 App 开发中非常常见,本篇借登录页面的开发介绍了文本框 TextField组件的使用,同时使用文本框的装饰属性实现了个性化文本框设置。
    2021-06-06
  • Android的APK应用签名机制以及读取签名的方法

    Android的APK应用签名机制以及读取签名的方法

    这篇文章主要介绍了Android的APK应用签名机制以及读取签名的方法,这里作者推荐使用Java自带的API进行APK签名的读取,需要的朋友可以参考下
    2016-02-02
  • Android Studio 一键生成Json实体类教程

    Android Studio 一键生成Json实体类教程

    这篇文章主要介绍了Android Studio 一键生成Json实体类教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 自定义AlertDialog去除黑色背景的解决方法

    自定义AlertDialog去除黑色背景的解决方法

    今天小编就为大家分享一篇自定义AlertDialog去除黑色背景的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Android实现获取验证码倒计时功能

    Android实现获取验证码倒计时功能

    这篇文章主要为大家详细介绍了Android实现获取验证码倒计时功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android编程图片操作类定义与用法示例【拍照,相册选图及裁剪】

    Android编程图片操作类定义与用法示例【拍照,相册选图及裁剪】

    这篇文章主要介绍了Android编程图片操作类定义与用法,涉及Android拍照,相册选图及裁剪等图片操作功能及权限控制相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Android编程绘图操作之弧形绘制方法示例

    Android编程绘图操作之弧形绘制方法示例

    这篇文章主要介绍了Android编程绘图操作之弧形绘制方法,结合实例形式分析了Android图形绘制的相关组件调用、属性设置与功能实现技巧,需要的朋友可以参考下
    2017-08-08

最新评论