Android Studio字体失效咨询:XML显示正常但真机与模拟器不生效
Android字体XML显示正常但真机/模拟器不生效?这些坑你可能踩了
我经常遇到开发者问这个问题——Android Studio预览里字体好好的,一跑真机就打回原形,大概率是下面这些原因,一个个排查:
1. 字体文件放错地方了
Android对自定义字体的存放路径有明确要求:
- API 26及以上,字体文件必须放在
res/font/目录下(没有就自己建),这样才能用@font/xxx直接引用。 - 如果你把字体丢去
assets/目录,那XML里的@font引用根本找不到文件,只能在代码里通过Typeface.createFromAsset()加载,预览能识别但真机不认很正常。
2. XML引用方式没适配API级别
别小看这个,不同版本的Android引用逻辑不一样:
- API 26+:直接写
android:fontFamily="@font/your_font"就行。 - 低于API 26:得先在
res/font/里建一个字体族XML(比如my_font_family.xml),内容如下:
然后XML里引用<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/your_font"/> </font-family>@font/my_font_family,或者用app:fontFamily(前提是依赖了AppCompat库)。
3. 字体文件本身有问题
有些字体文件看起来没问题,其实是损坏或者格式不兼容:
- 先换个已知能用的字体测试(比如系统自带的字体),如果正常,那就是你用的字体文件有问题。
- 检查文件名:Android资源文件名只能用小写字母、数字、下划线,别用空格、中文或者特殊字符,比如把
微软雅黑.ttf改成msyh.ttf试试。 - 可以用字体转换工具重新导出成标准TTF/OTF格式。
4. 缓存在搞鬼
Android Studio的预览缓存和真机的APP缓存经常不同步:
- 先清理Studio缓存:
File > Invalidate Caches... > Invalidate and Restart,重启后再编译。 - 卸载真机/模拟器上的APP,重新安装(别直接覆盖安装,有时候缓存清不干净)。
- 模拟器的话,还可以去
设置 > 应用 > 你的APP > 存储 > 清除数据,彻底清空缓存。
5. AppCompat库拖后腿
如果你用的是app:fontFamily而不是android:fontFamily,一定要确保AppCompat库版本够新(至少26.0.0以上)。去Module级的build.gradle里检查依赖:
implementation 'androidx.appcompat:appcompat:1.6.1' // 用最新稳定版就行
同步后再跑一遍试试。
6. 代码里偷偷覆盖了字体
别忽略这个!有时候XML里设置好了字体,结果Java/Kotlin代码里又动态设置了其他字体:
textView.setTypeface(Typeface.DEFAULT) // 这会直接覆盖XML的配置
检查一下你的Activity/Fragment里有没有类似的代码,不小心就会踩这个坑。
如果以上方法都试过还是不行,可以把你的API级别、字体引用代码、build.gradle依赖贴出来,我再帮你针对性排查~
内容的提问来源于stack exchange,提问作者Radu Martin
相关产品推荐
相关产品推荐

