问题
I'm using compileSdk
and targetSdk
version 27 and in last release I used new font resource feature for my project but after a day I got 3 crashes for this line of code
Typeface typeface = ResourcesCompat.getFont(this, R.font.my_font);
and the crash report says it's because of android.content.res.Resources$NotFoundException
and Font resource could not be retrieved. All 3 crashes happened for users with android version 5.1.1
. Is this a bug in support library or I'm doing something wrong?
回答1:
Had this same issue, noticed a detail in the docs that helped:
When you declare font families in XML layout through the support library, use the app namespace to ensure your fonts load.
<?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>
I had been using the 'android' namespace before, changing to the 'app' namespace made my fonts load on older devices correctly.
回答2:
I got the same crash while using Downloadable fonts on API level 16 with Google Play services 9.2.56 (emulator).
If you're using this, then a device must have Google Play services version 11 or higher to use the Google Fonts provider (see this note in the docs).
回答3:
I had the same problem with a TTF file in R.font when using ResourcesCompat.getFont()
.
It turns out that Android didn't like this TTF file for some reason. There was no info in logcat, but debugging showed that TypefaceCompat.createFromResourcesFontFile()
failed.
I replaced the TTF file with another, similar font and had no problems since.
来源:https://stackoverflow.com/questions/48825038/font-resource-could-not-be-retrieved