Android SpannableString 设置文字圆角背景

SpannableString 设置文字圆角背景

最新项目有新需求,在标题的文字中加入标签文字,并且标签文字和标题文字显示的形式不一样。

标签文字的颜色和标题文字的颜色不一样,并且还加了圆角的背景

先上效果图

Android SpannableString 设置文字圆角背景_第1张图片

当刚看到效果图的时候,就想到了SpannableString,大家都知道在Android中使用SpannableString可以设置文本中部分字体的样式,
但是当浏览SpannableString的属性的时候,发现并没有设置文字背景为圆角这一属性。基本上Android中当遇到圆角的时候都是需要自己去写代码实现出来的。

既然SpannableString没有,那我们就自己去实现一个。如果去定义一个Span只需
extends ReplacementSpan并且实现getSize和draw两个方法

在getSize中返回的是设置文字的大小,如果返回的是文字大小,return ((int)paint.measureText(text, start, end))
如果需要增加文字的间距,可以对return的数据自己处理。

在draw中就可以对文本的样式进行修改了,需要什么就自己去画

下面给出代码和我做的效果图

Android SpannableString 设置文字圆角背景_第2张图片

下面是具体的实现

public class RoundBackgroundColorSpan extends ReplacementSpan{
    private int bgColor;
    private int textColor;
    public RoundBackgroundColorSpan(int bgColor, int textColor) {
        super();
        this.bgColor = bgColor;
        this.textColor = textColor;
    }
    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
        return ((int)paint.measureText(text, start, end)+60);
    }

    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        int color1 = paint.getColor();
        paint.setColor(this.bgColor);
        canvas.drawRoundRect(new RectF(x, top+1, x + ((int) paint.measureText(text, start, end)+40), bottom-1), 15, 15, paint);
        paint.setColor(this.textColor);
        canvas.drawText(text, start, end, x+20, y, paint);
        paint.setColor(color1);
    }
}

在Activity中对文本进行设置就行了

 SpannableString spannableString=new SpannableString("#"+listBean.getLabel_name()+"#"+listBean.getTitle());
                spannableString.setSpan(new RoundBackgroundColorSpan(Color.parseColor("#12DBD1"),Color.parseColor("#FFFFFF")), 0, listBean.getLabel_name().length()+2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                TextView title = (TextView) baseViewHolder.getView(R.id.hot_fragment__recycleview_mb_title);

你可能感兴趣的:(android)