Android Spannablecontent With Rounded Corners

前端 未结 8 868
无人及你
无人及你 2020-12-13 15:06

I am trying to change my string to make a badge with a number in the middle by using Spannable String. I can highlight the appropriate letter/number by setting the BackGrou

8条回答
  •  执笔经年
    2020-12-13 15:51

    I further improved mvandillen class.

    This seems to work very fine:

    public class RoundedBackgroundSpan extends ReplacementSpan
        {
            private final int mPadding = 10;
            private int mBackgroundColor;
            private int mTextColor;
    
            public RoundedBackgroundSpan(int backgroundColor, int textColor) {
                super();
                mBackgroundColor = backgroundColor;
                mTextColor = textColor;
            }
    
            @Override
            public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
                return (int) (mPadding + paint.measureText(text.subSequence(start, end).toString()) + mPadding);
            }
    
            @Override
            public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint)
            {
                float width = paint.measureText(text.subSequence(start, end).toString());
                RectF rect = new RectF(x, top+mPadding, x + width + 2*mPadding, bottom);
                paint.setColor(mBackgroundColor);
                canvas.drawRoundRect(rect, mPadding, mPadding, paint);
                paint.setColor(mTextColor);
                canvas.drawText(text, start, end, x+mPadding, y, paint);
            }
        }
    

提交回复
热议问题