compileSdk
とtargetSdk
バージョン27を使用していますが、前回のリリースではプロジェクトに新しいフォントリソース機能を使用していましたが、1日後にこのコード行で3回クラッシュしました
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_font);
クラッシュレポートには、Android.content.res.Resources$NotFoundException
およびFontリソースを取得できませんでした。 Android version 5.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」名前空間を使用していましたが、「app」名前空間に変更すると、古いデバイスでフォントが正しく読み込まれます。
Google Play開発者サービス9.2.56(エミュレーター)でAPIレベル16で ダウンロード可能なフォント を使用しているときに同じクラッシュが発生しました。
これを使用している場合、デバイスでGoogleフォントプロバイダーを使用するには、Google Play開発者サービスのバージョン11以降が必要です(- docs )。
ResourcesCompat.getFont()
を使用すると、R.fontのTTFファイルで同じ問題が発生しました。
Androidが何らかの理由でこのTTFファイルを気に入らなかったことがわかりました。logcatには情報がありませんでしたが、デバッグによりTypefaceCompat.createFromResourcesFontFile()
が失敗したことがわかりました。
私はTTFファイルを別の同様のフォントに置き換えましたが、それ以来問題はありませんでした。