
本文详解在 Android 中全局应用自定义字体的正确方法,包括资源目录创建规范、字体文件放置位置、主题样式配置及常见错误规避,助你快速解决 aapt: invalid resource directory name 等构建失败问题。
本文详解在 android 中全局应用自定义字体的正确方法,包括资源目录创建规范、字体文件放置位置、主题样式配置及常见错误规避,助你快速解决 `aapt: invalid resource directory name` 等构建失败问题。
在 Android 8.0(API 26)及以上版本中,官方原生支持通过 资源统一管理自定义字体,并可全局应用于整个应用。但许多开发者因目录命名不规范或路径配置错误而遇到类似 aapt: invalid resource directory name 'font' 的构建报错——根本原因在于资源目录名必须全小写且严格为 font(而非 fonts、Font 或 font/)。
✅ 正确操作步骤如下:
-
创建标准字体资源目录
在app/src/main/res/下新建目录:font
⚠️ 注意:名称必须是纯小写
font,不可带斜杠、大写或复数形式(如fonts会直接导致 aapt 报错)。 添加字体文件
将你的.ttf或.otf字体文件(例如myfontname.ttf)放入该font目录中。建议使用小写字母+下划线命名(如roboto_medium.ttf),避免空格与特殊字符。-
在主题中全局应用字体
编辑res/values/themes.xml(或styles.xml),在应用级主题(如Theme.MyApplication)中添加android:fontFamily属性:<style name="Theme.MyApplication" parent="Theme.Material3.DayNight"> <!-- 全局默认字体 --> <item name="android:fontFamily">@font/myfontname <!-- 可选:同时覆盖系统控件字体行为 --> <item name="fontFamily">@font/myfontname </style>? 说明:
android:fontFamily作用于 API 16+ 的TextView及其子类;fontFamily(无android:前缀)是 Material Theme 的属性,确保MaterialButton、TextInputLayout等组件也继承该字体。 -
验证与兼容性补充(可选)
- 若需兼容 Android 4.1+(API 16)且使用
AppCompat,请确保主题继承自Theme.AppCompat,并启用AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)(仅当使用矢量字体图标时需要)。 - 对于
TextView单独定制,仍可使用android:fontFamily="@font/myfontname"属性,但全局配置更高效、一致。
- 若需兼容 Android 4.1+(API 16)且使用
? 常见错误排查:
- ❌
res/font/→ ✅res/font(无尾部斜杠) - ❌
res/Font/或res/fonts/→ ✅res/font(全小写单数) - ❌ 字体文件放在
assets/或raw/→ ✅ 必须置于res/font/下,才能被@font/xxx引用 - ❌ 忘记清理构建缓存 → 执行
Build > Clean Project后重试
完成上述配置后,重启应用,所有系统 TextView、Button、EditText 等控件将自动使用指定字体,实现真正意义上的“全应用字体统一”。











