最新项目有新需求,在标题的文字中加入标签文字,并且标签文字和标题文字显示的形式不一样。
标签文字的颜色和标题文字的颜色不一样,并且还加了圆角的背景
先上效果图
当刚看到效果图的时候,就想到了SpannableString,大家都知道在Android中使用SpannableString可以设置文本中部分字体的样式,
但是当浏览SpannableString的属性的时候,发现并没有设置文字背景为圆角这一属性。基本上Android中当遇到圆角的时候都是需要自己去写代码实现出来的。
既然SpannableString没有,那我们就自己去实现一个。如果去定义一个Span只需
extends ReplacementSpan并且实现getSize和draw两个方法
在getSize中返回的是设置文字的大小,如果返回的是文字大小,return ((int)paint.measureText(text, start, end))
如果需要增加文字的间距,可以对return的数据自己处理。
在draw中就可以对文本的样式进行修改了,需要什么就自己去画
下面给出代码和我做的效果图
下面是具体的实现
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);