web-dev-qa-db-ja.com

フォントリソースを取得できませんでした

compileSdktargetSdkバージョン27を使用していますが、前回のリリースではプロジェクトに新しいフォントリソース機能を使用していましたが、1日後にこのコード行で3回クラッシュしました

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

クラッシュレポートには、Android.content.res.Resources$NotFoundExceptionおよびFontリソースを取得できませんでした。 Android version 5.1.1。これはサポートライブラリのバグですか、それとも何か問題がありますか?

15
Amir_P

これと同じ問題があり、助けとなったドキュメントの詳細に気づきました:

サポートライブラリを介して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」名前空間を使用していましたが、「app」名前空間に変更すると、古いデバイスでフォントが正しく読み込まれます。

4
dwemthy

Google Play開発者サービス9.2.56(エミュレーター)でAPIレベル16で ダウンロード可能なフォント を使用しているときに同じクラッシュが発生しました。

これを使用している場合、デバイスでGoogleフォントプロバイダーを使用するには、Google Play開発者サービスのバージョン11以降が必要です(- docs )。

2
Vadim Kotov

ResourcesCompat.getFont()を使用すると、R.fontのTTFファイルで同じ問題が発生しました。

Androidが何らかの理由でこのTTFファイルを気に入らなかったことがわかりました。logcatには情報がありませんでしたが、デバッグによりTypefaceCompat.createFromResourcesFontFile()が失敗したことがわかりました。

私はTTFファイルを別の同様のフォントに置き換えましたが、それ以来問題はありませんでした。

0