没有合适的资源?快使用搜索试试~ 我知道了~
Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
5 下载量 48 浏览量
2021-01-05
02:15:44
上传
评论 1
收藏 59KB PDF 举报
温馨提示
试读
1页
AndroidRichText帮助实现像QQ,微信一样的,一个TextView里既有文字又有表情又有图片的效果,采用插件化的框架,代码简单,可拓展性强。 基础框架包只有四个java文件, RichTextWrapper :TextView的包裹类,实现支持富文本,通过new RichTextWrapper(TextView v)来构造。 RTMovementMethod: 继承自Android原生的LinkMovementMethod,重写onTouchEvent方法,优化了ClickSpan(点击响应的文字区域)的点击响应。 Resolver:一个接口,我们需要实现一种支持富文本类型
资源推荐
资源详情
资源评论
Android RichText 让让Textview轻松的支持富文本(图像轻松的支持富文本(图像
ImageSpan、点击效果等等类似、点击效果等等类似QQ微信聊天)微信聊天)
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 应用APP加入聊天功能Android高仿微信聊天界面代码分享
Android蓝牙通信聊天实现发送和接受功能Android中基于XMPP协议实现IM聊天程序与多人聊天室android Socket实现简单聊
天功能以及文件传输Android仿微信语音聊天功能Android仿QQ、微信聊天界面长按提示框效果Android编程实现泡泡聊天界面
实例详解(附源码)android使用Socket通信实现多人聊天应用
资源评论
weixin_38621365
- 粉丝: 7
- 资源: 906
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功