You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio 2020.3.1出现Unknown resource type fonts错误如何解决

错误原因

你混用了两种Android自定义字体的实现逻辑,同时引用路径写法错误,才会出现Unknown resource type fonts报错:

  1. @fonts/xxx的引用方式属于Android官方Font in XML特性,要求字体文件必须存放在res/font目录下,且正确写法是@font/xxx(你多写了一个s)
  2. 你当前的字体实际存放在assets/fonts目录下,这种方式只能通过代码动态加载,不能直接用@font/xxx在XML中引用

解决方法

你可以根据自己的需求选择以下任意一种方案:

方案1:保留现有assets动态加载逻辑

  • 删除XML中android:fontFamily="@fonts/zaxo"配置,删除style.xml中<item name="android:fontFamily">@fonts/zaxo</item>配置,你已经实现了app:font自定义属性和Java动态加载逻辑,不需要额外在XML硬编码字体配置,删除后报错直接消失
  • 如果需要XML预览时显示自定义字体效果,可以用tools:fontFamily="@font/zaxo"替代原有配置,该属性仅作用于预览阶段,不会参与打包,不会触发报错
  • assets下的字体本身就不会出现在Android Studio的可视化字体选择列表中,属于正常现象,不影响实际运行效果

方案2:改用官方Font in XML方案(支持可视化选择字体)

  1. 在res目录下新建名为font的文件夹,将所有字体文件拷贝到该目录下,注意字体文件名只能包含小写字母、数字和下划线,不能有大写字符或特殊符号
  2. 将原有XML和style中的@fonts/zaxo修改为@font/zaxo,Unknown resource type fonts报错会直接消失
  3. 此时打开字体选择器,你添加的自定义字体会正常出现在列表中
  4. 如果需要保留动态切换字体的逻辑,可以将Java代码中createFromAsset的逻辑替换为官方资源加载方式:
fromAsset = ResourcesCompat.getFont(context, R.font.zaxo);

额外优化建议

  • 你当前工具类中的currentTypeface和fromAsset为静态变量,会长期持有Context引用,存在内存泄漏风险,建议改为使用Application Context加载字体,或取消静态缓存逻辑
  • 如果采用方案1,建议检查自定义app:font属性对应的BindingAdapter实现,确保能正常调用工具类方法给TextView设置字体

内容的提问来源于stack exchange,提问作者ayman berwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:07