创建字体模块与字体映射规则详解
为什么字体模块比 Emoji 模块复杂
字体模块不是替换一个文件,而是要把你选的字体映射到系统原有字体家族上。只映射 Regular 字重 = 粗体和斜体还是系统默认字体——这是新手最容易犯的错。
英文 Roboto 家族映射规则
Android 系统默认英文字体是 Roboto 家族,四种字重必须全部映射:
| 你的字体文件 | 映射到系统字体 |
|---|---|
| MyFont-Regular.ttf | → Roboto-Regular.ttf |
| MyFont-Bold.ttf | → Roboto-Bold.ttf |
| MyFont-BoldItalic.ttf | → Roboto-BoldItalic.ttf |
| MyFont-Italic.ttf | → Roboto-Italic.ttf |
少一个都不行。比如只映射了 Regular,界面上的按钮文字(粗体)还是系统默认字体,看起来就像「换了一半」。
中文 CJK 字体家族
Android 系统中文字体家族因品牌而异:
| 品牌 | 系统中文字体家族 |
|---|---|
| 原生 AOSP(Pixel) | NotoSansSC / NotoSansTC / NotoSansHK |
| Samsung OneUI | SamsungSans |
| Huawei HarmonyOS | HarmonyOS Sans |
| Xiaomi HyperOS | MiSans |
| OPPO / realme | OPPOSans |
| vivo | vivo Sans |
你的中文字体文件需要映射到对应品牌的字体家族,同样要覆盖所有字重(Regular / Bold / Medium 等)。
缅文等其他语言
zFont3 官方帮助中心提到:
- 缅文(Myanmar):映射到
NotoSansMyanmar家族 - 其他语言:查看系统字体目录
system/fonts/找到对应家族名
zFont3 的自动映射 vs 手动映射
- 自动映射:zFont3 会根据你选的字体文件的文件名自动尝试匹配 Roboto / Noto 等家族——但只对标准命名的字体有效
- 手动映射:如果自动映射结果不对(比如你的字体家族不是 Roboto),需要手动指定每个文件的映射目标
创建模块前仔细检查一下映射表,确认每个字重都配对了再生成。
映射错误的表现
| 错误类型 | 表现 | 修复 |
|---|---|---|
| 漏映射 Bold | 正文字体换了,按钮粗体还是默认 | 补 Bold 字重映射 |
| 只映射 Regular | 换了一半,斜体和粗体都没变 | 补全四种字重 |
| 中文字体没映射 | 英文换了,中文还是默认 | 添加 CJK 家族映射 |
| 映射到不存在的家族 | 模块刷入后字体全部变成方框乱码 | 检查系统真实字体目录 |