本节是对以往章节的一个复习练习,用到的知识前面已经提到过,不知道的同学请参考前几篇文章。
Android——SpannableString字体大小不一致垂直居中

今天要实现的效果图如下:
在这里插入图片描述
RadiusBackgroundSpan

public class RadiusBackgroundSpan extends ReplacementSpan {    private int fontSize = -1;    private boolean isSp = true;    private int margin;    private int padding;    private int radius;    private int textColor;    private int bgColor;    public RadiusBackgroundSpan(int fontSize, int margin, int radius, int textColor, int bgColor) {        this.fontSize = fontSize;        this.margin = margin;        this.radius = radius;        this.textColor = textColor;        this.bgColor = bgColor;    }    @Override    public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) {        Paint newPaint = getCustomTextPaint(paint);        return (int) newPaint.measureText(text, start, end) + margin * 2;    }    @Override    public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int            bottom, @NonNull Paint paint) {        Paint newPaint = getCustomTextPaint(paint);        int textWidth = (int) newPaint.measureText(text, start, end);        RectF rect = new RectF();        rect.top = top + margin;        rect.bottom = bottom - margin;        rect.left = (int) (x + margin);        rect.right = rect.left + textWidth + margin;        paint.setColor(bgColor);        canvas.drawRoundRect(rect, radius, radius, paint);        newPaint.setColor(textColor);        Paint.FontMetrics fontMetrics = newPaint.getFontMetrics();        int offsetX = (int) ((rect.right - rect.left - textWidth) / 2) + margin;        int offsetY = (int) ((y + fontMetrics.ascent + y + fontMetrics.descent) / 2 - (top + bottom) / 2);        canvas.drawText(text, start, end, x + offsetX, y - offsetY, newPaint);    }    private TextPaint getCustomTextPaint(Paint srcPaint) {        TextPaint textPaint = new TextPaint(srcPaint);        if (fontSize != -1) {            textPaint.setTextSize(isSp ? fontSize * textPaint.density : fontSize);        }        return textPaint;    }}

MainActivity.java

private void radiusTagSpan() {        String format = "哪吒之魔童降世上映新推荐";        SpannableString ss = new SpannableString(format);        RadiusBackgroundSpan radiusBackgroundSpan = new RadiusBackgroundSpan(35, 10, 10, getResources().getColor(R                .color.white), getResources().getColor(R.color.red));        ss.setSpan(radiusBackgroundSpan, format.length() - 3, format.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);        tvImageSpan.setText(ss);    }

更多相关文章

  1. android Edittext内容字体大小动态变化
  2. Android 同个TextView设置字体大小不一样
  3. 调整recovery界面菜单字体大小
  4. Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。
  5. Android 单独控件实现不同字体大小、不同颜色
  6. android 根据TextView宽度 自动缩小字体大小 以适应其宽度
  7. android studio 更改背景和设置字体大小
  8. 教你如何修改Android默认字体大小和设置字体大小比例
  9. android 9.0 10.0 修改默认字体大小

随机推荐

  1. Android使用SQLite数据库(1)
  2. android 随手记之文件+参数上传请求
  3. 清单文件Manifest中的android:name
  4. android开发出现No Launcher activity fo
  5. 关于android原生Webview的一些属性整理(持
  6. Android开发错误信息与解决方案汇总
  7. Android之录制视频文件
  8. android 源代码研究之----frameworks----
  9. Android 不休眠 不锁屏
  10. Android for x86