您的位置:首页 > 其它

SpannableString实现TextView多文字颜色显示

2017-03-24 14:21 162 查看
我们在开发过程中有时候需要在同一个TextView中显示多种文字颜色,比较常见的比如:回复XX评论,@XXX等。



这种实现我们可以结合SpannableString来选取TextView的某一段字符显示不同的颜色:

/**
* 文本变色处理
*
* @param desc
* @param commentUserNickname
*/
private SpannableString setColor(String desc, String commentUserNickname) {
SpannableString spanText = new SpannableString(desc);
Parcel p = Parcel.obtain();
p.writeInt(ctx.getResources().getColor(R.color.color_chat_blue_bg));
p.setDataPosition(0);
ForegroundColorSpan fcs = new ForegroundColorSpan(p);
spanText.setSpan(fcs, 0, commentUserNickname.length() + 1,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
return spanText;
}


主要介绍一下setSpan()方法的四个参数的含义:

/**
* @param what  SpannableString不仅仅可以设置字体颜色还有背景色,字体大小等许多功能,此处列举相对常用的
*              如BackgroundColorSpan 背景色
*              ForegroundColorSpan 文本颜色(前景色)场景:回复评论
*              StrikethroughSpan 删除线(中划线) 场景:物品打折降价
*              UnderlineSpan 下划线
*              AbsoluteSizeSpan 绝对大小(文本字体)
*              DynamicDrawableSpan 设置图片,基于文本基线或底部对齐
*              StyleSpan 字体样式:粗体、斜体等
*              TypefaceSpan 文本字体
*              URLSpan 文本超链接
* @param start 开始设置字符串的起始索引
* @param end   设置字符串的结束索引
* @param flags 有四个取值
*              Spannable.SPAN_EXCLUSIVE_EXCLUSIVE  :前后都不包括,(a,b)
*              Spannable.SPAN_EXCLUSIVE_INCLUSIVE  :前面不包括,后面包括。(a,b]
*              Spannable.SPAN_INCLUSIVE_EXCLUSIVE  :前面包括,后面不包括。[a,b)
*              Spannable.SPAN_INCLUSIVE_INCLUSIVE  :前后都包括。[a,b]
*/
public void setSpan(Object what, int start, int end, int flags) {
}


此处主要使用了变色的知识,其他功能和此类似只需改变what参数的对象即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息