【问题标题】:Font resource could not be retrieved无法检索字体资源
【发布时间】:2018-07-27 06:15:02
【问题描述】:

我使用的是 compileSdk 和 targetSdk 版本 27,在上一个版本中,我为我的项目使用了新的字体资源功能,但一天后,这行代码出现了 3 次崩溃

Typeface typeface = ResourcesCompat.getFont(this, R.font.my_font);

并且崩溃报告说这是因为android.content.res.Resources$NotFoundException 并且无法检索字体资源。所有 3 次崩溃都发生在 android 版本 5.1.1 的用户身上。这是支持库中的错误还是我做错了什么?

【问题讨论】:

标签: java android fonts android-support-library


【解决方案1】:

有同样的问题,注意到文档中的一个细节有帮助:

当您通过支持在 XML 布局中声明字体系列时 库,使用 app 命名空间来确保你的字体加载。

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
  <font app:fontStyle="normal" app:fontWeight="400" app:font="@font/myfont-Regular"/>
  <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
</font-family>

我之前一直使用“android”命名空间,更改为“app”命名空间使我的字体可以正确加载到旧设备上。

【讨论】:

  • 不适用于我正在使用的可下载字体。 :(
  • 似乎可以完成这项工作,谢谢。测试正常。不过没有尝试下载字体。
【解决方案2】:

在 API 级别 16 和 Google Play 服务 9.2.56(模拟器)上使用 Downloadable fonts 时,我遇到了同样的崩溃。

如果您正在使用它,那么设备必须具有 Google Play 服务版本 11 或更高版本才能使用 Google 字体提供商(请参阅 docs 中的此说明)。

【讨论】:

  • 感谢您的回答,但我没有使用可下载字体
  • @Shrikant 我只是使用了不同的模拟器。在真实设备上你应该不会遇到这个错误,因为这个版本的 Google Play 服务已经很老了。
  • @VadimKotov 但我在真实设备上遇到了这个问题
  • @Shrikant 我也收到了一些来自真实设备的崩溃报告,我认为this discussion 会有所帮助。将尝试根据链接重构我的代码。
  • 如何测试Google Play服务的版本?
【解决方案3】:

在使用ResourcesCompat.getFont() 时,我在 R.font 中的 TTF 文件遇到了同样的问题。

事实证明,Android 出于某种原因不喜欢这个 TTF 文件。 logcat中没有信息,但调试显示TypefaceCompat.createFromResourcesFontFile()失败。

我用另一种类似的字体替换了 TTF 文件,此后没有任何问题。

【讨论】:

    【解决方案4】:

    在我的情况下,即使将 Gradle 版本升级到最新版本也不起作用。 对我有用的是一个非常简单的解决方案,将依赖项版本更新到最新版本。我不知道它是否适用于您的情况,但也许您应该尝试一次。

    【讨论】:

      【解决方案5】:

      在 API 级别 16 上使用 可下载字体

      字体需要下载,因此最好检查互联网连接并下载它们,即使它们是从字体文件夹提供的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2017-04-02
        • 2018-01-24
        • 2012-06-19
        • 1970-01-01
        相关资源
        最近更新 更多