首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何做到既用textView样式又能改变字体?

如何做到既用textView样式又能改变字体?

原创
作者头像
薇芯公重号 AI创造财富
发布于 2025-08-29 12:20:07
发布于 2025-08-29 12:20:07
2820
举报
代码语言:txt
复制
public class VectorTextView extends androidx.appcompat.widget.AppCompatTextView {

    public VectorTextView(Context context) {
        super(context);
        init();
    }

    public VectorTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public VectorTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setLayerType(LAYER_TYPE_SOFTWARE, null); // 软件渲染
        getPaint().setAntiAlias(false);          // 关闭抗锯齿
        getPaint().setSubpixelText(false);      // 关闭亚像素渲染
        setTextColor(Color.BLACK);              // 纯黑
    }
}

你看到的效果——既保留了 XML 样式、gravity、padding、换行等,又能强制成纯黑——是因为:


1. TextView 本身已经实现了 onDraw

  • AppCompatTextView 继承自 TextView,内部早就帮你写好了 onDraw(Canvas),它会按照 gravity、textSize、ellipsize、lineSpacing、padding、textAlignment 等各种属性去绘制文字。
  • 所以如果你继承 AppCompatTextView,但不去重写 onDraw(),那么绘制逻辑还是走 系统 TextView 的原始流程。

2. 你只是在 init() 里修改了 Paint

  • getPaint() 拿到的就是 TextView 内部真正用来画文字的 TextPaint。
  • 当系统调用 onDraw() 去画字时,它用的正是这个 Paint,所以你对它设置的 getPaint().setAntiAlias(false); getPaint().setSubpixelText(false); setTextColor(Color.BLACK); 都会生效。
  • 这样一来,你并没有改绘制流程,只是把 颜色、抗锯齿策略 换掉了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. TextView 本身已经实现了 onDraw
  • 2. 你只是在 init() 里修改了 Paint
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档