SpannableString实现TextView多文字颜色显示

我们在开发过程中有时候需要在同一个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参数的对象即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值