Android 未找到运行时异常字体资源

Android Runtime Exception font asset not found

这是我的代码和屏幕截图,我正在尝试设置自定义字体字样,但当字体文件位于资产文件夹中时,出现运行时异常,找不到字体资产。我错过了什么吗?

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

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

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

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

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

字体字样=Typeface.createFromAsset(this.getAssets(),"font/terminal.ttf");

((TextView) findViewById(R.id.weatherHeadingTV)).setTypeface(字体);

我试过另一个字体文件,效果很好所以我得出结论,早期的字体文件已损坏。感谢@Miduhun MP、@Gowtham Raj 和@jagan reddy

如果您将 Instant 运行 与 Android Gradle 插件版本 2.2.0-alphaX 一起使用,这是一个已知错误。

解决方法是关闭 Instant 运行,直到问题得到解决。

您可以在这里追踪:https://code.google.com/p/android/issues/detail?id=212849&can=1&q=subcomponent%3DTools-Studio%20-has%3Aproject%20attachments%3D0&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened&start=7700

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

如果您使用 AndroidAnnotations,请在应用 build.gradle 中验证资产文件夹是否正常:例如:main/src/assets.

如果您更改字体,请从您的 device/emulator 中卸载您的应用,然后再次 运行。

代码:

public static void setFontFace(Context context, TextView textView) {
  Typeface type = Typeface.createFromAsset(context.getAssets(), "myfont.ttf");
  textView.setTypeface(type);
}

我遇到了 Android 7+ 不接受 .woff 字体的问题。所以我切换到 .ttf 字体。

我遇到了同样的问题并设法解决了它。最初我认为字体文件已损坏,但事实并非如此。然后我认为 Android Studio 不喜欢 .ttf 文件,因为它们是唯一无法工作的文件。原来是字体没问题。

修复:只需单击 Build > Clean project。马上帮我修好了。

对我来说,字体文件本身已损坏。我尝试了另一个使其工作。

我已经研究了所有答案,但 none 对我有用。 阅读文档后,我找到了一个新的解决方案。 以下是要遵循的步骤:

  1. 转到文件菜单
  2. 在新建中,转到文件夹并创建资产文件夹
  3. 将您的字体文件粘贴到此资产文件夹中
  4. 使用 Typeface 属性在您的代码中使用。

    字体类型 = Typeface.createFromAsset(getAssets(), "myfont.ttf"); textView.setTypeface(类型);

现在,您已准备就绪,可以使用您喜欢的字体了。

  1. 文件夹名称应为 "fonts" 而不是 "font"
  2. 请注意,您的 "fonts" 文件夹位于 "assets" 文件夹下(应该位于 "main" 文件夹下,而不是 "res" 文件夹下) 我花了太长时间才弄明白这个...

使用这个方法:

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

ResourcesCompat class 是一种检索资源的兼容方式。