安卓运行时异常:找不到字体资源

26

这是我的代码和截图,我想设置自定义字体类型,但运行时出现了“字体资源未找到”的异常错误,而字体文件在资产文件夹中。我有什么遗漏的吗?

Typeface font = Typeface.createFromAsset(getAssets(), "font/terminal.ttf");
((TextView) findViewById(R.id.weatherHeadingTV)).setTypeface(font);

在此输入图片描述 Android Studio项目截图


3
我也遇到过类似的错误。重启Android Studio解决了问题,具体原因我也不清楚... - Christine
在我的情况下,甚至只是重新启动模拟器就可以解决问题。看起来这是Android Studio的一个bug。 - Ph0en1x
2
重新启动Android Studio(即使以管理员身份)对我没有用,我的文件夹路径是正确的。 - Denny
15个回答

62

使用这个方法:

final Typeface typeface = ResourcesCompat.getFont(context, R.font.X);

ResourcesCompat类是一个兼容的方式来检索您的资源。


2
嗨!虽然这段代码片段可能是解决方案,但包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您提出代码建议的原因。 - Wing
这对我有用,应该标记为正确答案。 - FabioR
最佳答案。简单明了,直击要害。 - zulkarnain shah
这应该是可接受的答案,它具有向后兼容性并避免了使用魔术字符串。 - davy307

17
  1. 文件夹的名称应为“fonts”,而不是“font”
  2. 请注意,您的“fonts”文件夹位于您的“assets”文件夹下(应位于您的“main”文件夹下,而不是“res”文件夹下) 我花了很长时间才明白这一点...

1
这是最佳答案。作者必须接受至少一个答案来帮助其他人。 - Félix Maroy

7

文件夹名称必须为'fonts'而不是'font'

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/" + font);

如果问题得到解决,请接受答案...这将有助于社区。 - Gowtham Raj
3
我已将字体文件夹重命名为"fonts",但仍然出现相同的错误。 - Muzammil Husnain

5

您的字体资产文件夹名称不正确。应该将文件夹命名为 fonts 而不是 font。并更改您的代码:

Typeface font = Typeface.createFromAsset(getAssets(), "fonts/terminal.ttf");

1
我已将字体文件夹重命名为fonts,但仍然出现相同的错误。 - Muzammil Husnain
1
@MuzammilHusnain:我认为这是棒棒糖的一个bug,请查看此答案https://dev59.com/Yl4d5IYBdhLWcg3wCOuC - Midhun MP
2
这是唯一解决我的问题的答案。我同时有“font”和“fonts”文件夹,它们是多余的。 - Armai

3

2

在项目中有资产且使用AS的 alpha 版本时,常见错误。这似乎是 Android Studio 构建系统中的一个 bug。一个简单的解决方法是在运行之前清除项目,这应该可以解决您面临的问题。


清理项目解决了问题!:) - Sudheesh Mohan

2

我曾经遇到过同样的问题,但最终解决了。起初我认为字体文件已损坏,但实际上并不是这样。然后我以为Android Studio不支持 .ttf 文件,因为只有这些文件不能正常工作。结果发现问题并不在字体上。

解决方法:只需点击 Build > Clean project 即可。对我来说直接解决了问题。


2
适用于我。
typefaceRegular = ResourcesCompat.getFont(mContext, R.font.sarala_regular);
            tv_bs_priceRange.setTypeface(typefaceRegular);

0

我遇到了这样的问题:Android 7+ 不接受 .woff 字体。所以我改用了 .ttf 字体。


0
尝试像这样访问字体:
val font = ResourcesCompat.getFont(requireContext(), R.font.inter_light)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接