Android 开发多行TextView背景色

我们在开发文字背景色时候,往往ui设计稿是背景色只是文字区域,但是系统自带的BackgroundColorSpan 无法达到这样效果,所以我们需要自定义背景色。

|

 贴上自定义BackgroundColorSpan代码:

public class BackgroundSpan extends ReplacementSpan {

    private int textColor;
    private int bgColor;
    private int radius = 0;
    private int size;
    private RectF oval;
    private int atUserId;
    private String atUserName;


    public BackgroundSpan(int textColor, int bgColor) {
        this(textColor, bgColor, 0);
    }

    public BackgroundSpan(int textColor, int bgColor, int radius) {
        this.textColor = textColor;
        this.bgColor = bgColor;
        this.radius = radius;
    }

    public void setAtData(int atUserId, String atUserName) {
        this.atUserId = atUserId;
        this.atUserName = atUserName;
    }

    public int getAtUserId() {
        return atUserId;
    }

    public void setAtUserId(int atUserId) {
        this.atUserId = atUserId;
    }

    public String getAtUserName() {
        return atUserName;
    }

    public void setAtUserName(String atUserName) {
        this.atUserName = atUserName;
    }


    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
        size = (int) paint.measureText(text, start, end) + 2 * radius;
        return size;
    }

    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        paint.setColor(bgColor);//设置背景颜色
        paint.setAntiAlias(true);// 设置画笔的锯齿效果

        oval = new RectF(x, y + paint.ascent(), x + size, y + paint.descent());
        //设置文字背景矩形,x为span其实左上角相对整个TextView的x值,y为span左上角相对整个View的y值。paint.ascent()获得文字上边缘,paint.descent()获得文字下边缘
        canvas.drawRoundRect(oval, radius, radius, paint);//绘制圆角矩形,第二个参数是x半径,第三个参数是y半径
        paint.setColor(textColor);//恢复画笔的文字颜色
        canvas.drawText(text, start, end, x + radius, y, paint);//绘制文字
    }
}

多行显示,一个字一个字去设置

public static void span(TextView textView,String spanText) {
        SpannableString spannableString = new SpannableString(spanText + "  ");
        int start = 0;
        for (int i = 1; i < spanText.length(); i++) {
            spannableString.setSpan(new BackgroundSpan(ContextCompat.getColor(textView.getContext(), R.color.common_tran_color),ContextCompat.getColor(textView.getContext(), R.color.common_tran_color)), start, start + 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
            start = i;
        }

        textView.setText(spannableString);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值