Ресурс шрифта не может быть восстановлен

Я использую compileSdk и targetSdk версии 27, и в последнем выпуске я использовал новую функцию ресурса шрифта для моего проекта, но через день у меня появилось 3 сбоя для этой строки кода

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

и в отчете о android.content.res.Resources$NotFoundException говорится об этом из-за android.content.res.Resources$NotFoundException и ресурс шрифта не могут быть восстановлены. Все 3 аварии произошли для пользователей с версией Android 5.1.1. Это ошибка в библиотеке поддержки, или я что-то делаю неправильно?

Ответ 1

Если бы эта же проблема была замечена в документах, которые помогли:

Когда вы объявляете семейства шрифтов в макете XML через библиотеку поддержки, используйте пространство имен приложений, чтобы обеспечить загрузку шрифтов.

<?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", перейдя в пространство имен "приложение", чтобы мои шрифты загружались на более старые устройства правильно.

Ответ 2

Я получил тот же сбой при использовании загружаемых шрифтов на уровне API 16 с сервисами Google Play 9.2.56 (эмулятор).

Если вы используете это, то на устройстве должна быть установлена служба Google Play версии 11 или выше, чтобы использовать поставщика Google Fonts (см. Это примечание в документации).

Ответ 3

У меня была такая же проблема с файлом TTF в R.font при использовании ResourcesCompat.getFont().

Получается, что Android почему-то не понравился этот файл TTF. В logcat не было никакой информации, но отладка показала, что TypefaceCompat.createFromResourcesFontFile() завершился ошибкой.

Я заменил файл TTF другим, похожим шрифтом и с тех пор проблем не было.

Ответ 4

android.content.res.Resources$NotFoundException Эта ошибка появилась, потому что приложение не нашло ваш файл my_font в вашем предоставленном местоположении. Итак, поместите этот файл my_font в папку с ресурсами, а затем запустите его.