最近项目需要要做评论回复功能了,在回复中包含2种情况,请看下面的图文介绍,回复中包含谁发表的回复,以及谁回复了谁。刚开始做的时候没想太多以为是几个textview拼接的,挺简单的。没想到做着做着发现问题了,当回复的内容大于一行时换行后就不会充满左边了,请看第二张图的效果。这肯定不符合产品的设计要求啊,没办法我就继续上网找答案,终于发现了我要的东西,也就是今天向大家介绍的知识点SpannableStringBuilder,一行textview可以包含所有的内容。

**介绍一下它**
SpannableStringBuilder有个亲兄弟——SpannableString。SpannableStringBuilder和SpannableString的区别类似与StringBuilder、String,就是SpannableStringBuilder可以拼接,而SpannableString不可拼接。
主要的方法
SpannableStringBuilder和SpannableString主要通过使用setSpan(Object what, int start, int end, int flags)改变文本样式。

对应的参数:
start: 指定Span的开始位置
end: 指定Span的结束位置,并不包括这个位置。
flags:取值有如下四个
Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式
Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式
Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括
what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有:
BackgroundColorSpan : 文本背景色
ForegroundColorSpan : 文本颜色
MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
RasterizerSpan : 光栅效果
StrikethroughSpan : 删除线
SuggestionSpan : 相当于占位符
UnderlineSpan : 下划线
AbsoluteSizeSpan : 文本字体(绝对大小)
DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
ImageSpan : 图片
RelativeSizeSpan : 相对大小(文本字体)
ScaleXSpan : 基于x轴缩放
StyleSpan : 字体样式:粗体、斜体等
SubscriptSpan : 下标(数学公式会用到)
SuperscriptSpan : 上标(数学公式会用到)
TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
TypefaceSpan : 文本字体
URLSpan : 文本超链接
ClickableSpan : 点击事件

ok,接下来咱们就要上案例了

1、文字添加颜色

 //修改文字颜色private void changTextColor() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#C2185B"));spannableString.setSpan(colorSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

2、设置背景颜色
//设置背景颜色
private void setBackgroundColor() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");BackgroundColorSpan bgColorSpan = new BackgroundColorSpan(Color.parseColor("#C2185B"));spannableString.setSpan(bgColorSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);
}

3、设置字体大小
//设置字体大小private void setTextViewSize() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(60);spannableString.setSpan(absoluteSizeSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

4、设置文字粗体、斜体字
//设置文字粗体、斜体字private void setTextViewBoldAndItalic() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");//setSpan可多次使用StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);//粗体spannableString.setSpan(styleSpan, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);StyleSpan styleSpan2 = new StyleSpan(Typeface.ITALIC);//斜体spannableString.setSpan(styleSpan2, 5, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);StyleSpan styleSpan3 = new StyleSpan(Typeface.BOLD_ITALIC);//粗斜体spannableString.setSpan(styleSpan3, 10, 15, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

5、文字添加删除线
 //文字添加删除线private void setTextViewStrickDelete() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");StrikethroughSpan strikethroughSpan = new StrikethroughSpan();spannableString.setSpan(strikethroughSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

6、文字添加下划线
//文字添加下划线private void setTextViewUnderline() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");UnderlineSpan underlineSpan = new UnderlineSpan();spannableString.setSpan(underlineSpan, 0, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

7、文字中插入图片
//文字中插入图片private void setTextViewInsertImg() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");ImageSpan imageSpan = new ImageSpan(this, R.mipmap.icon);//也可以这样//Drawable drawable = getResources().getDrawable(R.mipmap.girl);//drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());//ImageSpan imageSpan1 = new ImageSpan(drawable);//将index为10、12的字符用图片替代spannableString.setSpan(imageSpan, 10, 12, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.textview)).setText(spannableString);}

 
插入多张图片
SpannableStringBuilder ss = new SpannableStringBuilder("   欢迎光临的博客");
ImageSpan imageSpan = new ImageSpan(this, R.mipmap.icon_guan);
ss.setSpan(imageSpan, 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);ImageSpan imageSpan2 = new ImageSpan(this, R.mipmap.icon_jing);
ss.setSpan(imageSpan2, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
text.setText(ss);
8、文字设置点击事件
//文字设置点击事件private void setTextViewClick() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this, "点击事件", Toast.LENGTH_SHORT).show();}};spannableString.setSpan(clickableSpan, 10, 15, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);TextView textView = (TextView)findViewById(R.id.textview);textView.setText(spannableString);textView.setMovementMethod(LinkMovementMethod.getInstance());textview.setHighlightColor(ContextCompat.getColor(LoginActivity.this,R.color.transparent));}

9、使用SpannableStringBuilder事件组合使用
//使用SpannableStringBuilder事件组合使用private void functionCombination() {SpannableStringBuilder spannableString = new SpannableStringBuilder();spannableString.append("我是可以验证的一行文字显示多个内容");//图片ImageSpan imageSpan = new ImageSpan(this, R.mipmap.icon);spannableString.setSpan(imageSpan, 2, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//点击事件ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this, "点击", Toast.LENGTH_SHORT).show();}};spannableString.setSpan(clickableSpan, 2, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//文字颜色ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#C2185B"));spannableString.setSpan(colorSpan,5, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//文字下划线UnderlineSpan underlineSpan = new UnderlineSpan();spannableString.setSpan(underlineSpan, 8, 10, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);TextView textView = (TextView)findViewById(R.id.textview);textView.setText(spannableString);}

ok,以上就是SpannableStringBuilder的主要功能了,满足我们开发的需求了,希望能帮助到需要的人。
SpannableString使用详解

Android实现朋友圈的评论和回复相关推荐

  1. Android 朋友圈之评论回复列表

    转载请注明出处:http://blog.csdn.net/lv_fq/article/details/77836700 – [发强博客] 系列博客 Android 朋友圈之多图显示 Android 朋 ...

  2. 朋友圈自动回复评论_微信新版,朋友圈可以表情包回复了!网友:评论区斗起来.jpg...

    你们发现了吗? 朋友圈可以发表情包评论了! 微信iOS版7.0.9正式版今天迎来更新支持发消息时可以引用之前的内容更令人惊喜的是不少网友都发现新版本还新增朋友圈自定义表情评论功能可以用表情包评论别人的 ...

  3. 微信iOS7.0.9更新!除了朋友圈可以评论表情包,还有这些你可能不知道的功能!

    微信又㕛叒叕更新了~这次是iOS更新~ 本次更新版本号为7.0.9,官方更新日志只是简单提及"发消息时,可引用之前的内容",并未说明其他的更新! 接下来,我们一起看看有哪些重大更新 ...

  4. 评论安装_朋友圈怎么语音评论?微信朋友圈语音评论捷径下载安装使用教程

    微信朋友圈评论默认是不支持图片和语音评论的,不过可以通过一些链接的方式间接实现.之前小编为大家分享过"iPhone微信朋友圈图片评论方法",今天借助类似的原理,为大家分享一下微信朋 ...

  5. 打造Android微信朋友圈下拉刷新控件

    打造Android微信朋友圈下拉刷新控件> 转载于:https://www.cnblogs.com/zhujiabin/p/5707789.html

  6. 微信小程序-仿朋友圈点赞评论操作面板

    目录 微信小程序-仿朋友圈点赞评论操作面板 一.效果 二.实现 1.wxml实现 2.js实现 3.wxss实现 三.记录 1.dataset使用 微信小程序-仿朋友圈点赞评论操作面板 一.效果 二. ...

  7. java版微信朋友圈_java调用个人微信API接口发朋友圈,评论和删除朋友圈

    java调用个人微信API接口发朋友圈,评论和删除朋友圈 /** * 发送朋友圈任务 * @author wechatno:tangjinjinwx * @param ctx * @param vo ...

  8. android 查找朋友圈,Android仿微信朋友圈点击评论自动定位到相关行功能

    最近闲来无事,随便看看各种UI实现的代码 打开你的微信朋友圈,点击评论,你就会发现有一个小细节:文本输入框的高度恰好定位到这条信息的底部位置 这个实现起来其实很简单,咱们就来看看吧 最简单的Recyc ...

  9. Android仿微信朋友圈3评论输入框及点击外部和列表滑动时隐藏输入框和键盘解决方法

    接着上一篇的评论点赞弹框之后,这次来说说微信的评论输入框,点击屏幕外部评论框和键盘消失,滑动列表时输入框和键盘也要消失,这里不是说一定要舔微信啥的,只是单纯从技术角度出发,分析原理和实现,解决我们自己 ...

最新文章

  1. 3MIN干完一周的工作量?快来看看应该如何部署 Kubernetes!
  2. linux fdisk等命令,Linux fdisk命令操作磁盘(添加、删除、转换分区等)
  3. 通过相似性或相异指数的数值分布比较群落Beta多样性高低
  4. .NET新手系列(五)
  5. 深入理解:overflow:hidden——溢出,坍塌,清除浮动
  6. thinkphp5常用函数汇总_thinkphp 5 常用的助手函数
  7. 游戏筑基开发之栈、队列及基本功能实现(使用C语言链表的相关知识)
  8. C#设置鼠标光标为自定义图片
  9. c++基础 STL 第 0 篇:(模板)
  10. 程序猿生存指南-15 领导视察
  11. 微信 打开html文件,微信文件在电脑上打开文件
  12. Origin画并列柱状图
  13. Java学习实战教程之mysql优化
  14. 二分图匹配-匈牙利算法, 最小路径覆盖
  15. 竖流式沉淀池三角堰计算_一种辐流式沉淀池的双侧堰出水构造的制作方法
  16. mongo数据库的使用
  17. window+将html文件设置为我们的壁纸
  18. C语言中_exit()、exit()、return区别
  19. 十几年前跟QQ、MSN平起平坐的雅虎通要关闭了
  20. pytorch安装问题总结

热门文章

  1. oracle event   设置 alter system set events
  2. 累次积分怎么计算_什么是累次积分
  3. java数字格式化为货币字符串_Java把数字格式化为货币字符串实例代码
  4. super在python3和python2_Python扩展-使用super()Python 3 vs Python 2
  5. 保健养生不容错过这一菜王--笋
  6. Kubernetes Pod报错 filed to get sandbox image “k8s.gcr.io/pause:3.6“
  7. 路由器NAT 类型检测实现
  8. 活动倒计时HTML,活动倒计时代码(精确到毫秒)jquery插件
  9. 三炮的三舅走了,才发觉日子真的不经念叨呀!
  10. 仪电电子“结盟”复旦大数据学院