可下载字体未正确缓存
Downloadable Fonts not caching correctly
我的应用程序通过 Support Library 27.0.2
使用 Android 可下载字体,根据 API Guide on Android Developers 在 XML 上设置自定义字体。除了第一次在屏幕上绘制每个字体系列外,这些字体都会正常应用。
例如:如果我打开 ActivityA
,它的 Toolbar
将使用默认的 Roboto 显示 Tab1
标题,但 Tab2
和 Tab3
将使用我的自定义字体。第二次打开 ActivityA
(没有关闭应用程序)时,问题没有发生,所有选项卡都将使用自定义字体。除了选项卡标题,我还注意到工具栏上的问题。同样的情况:第一次打开后,字体应用正确。
res/values/font_certs.xml
和 res/font/font.xml
文件由 Android Studio 生成,与文档中提供的文件一样:
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
app:fontProviderAuthority="com.google.android.gms.fonts"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
app:fontProviderPackage="com.google.android.gms"
app:fontProviderQuery="Lato" />
这是清单:
<application ...>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>
和res/values/arrays.xml
:
<resources>
<array name="preloaded_fonts">
<item>@font/lato</item>
<item>@font/lato_bold</item>
<item>@font/lato_light</item>
<item>@font/raleway</item>
<item>@font/raleway_semibold</item>
</array>
</resources>
在 AppBarLayout
上使用以下主题应用字体:
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
<item name="android:fontFamily">@font/raleway</item>
<item name="android:gravity">center_horizontal</item>
</style>
该项目使用以下版本:
minSdkVersion = 19
targetSdkVersion = 26
compileSdkVersion = 26
buildToolsVersion = '27.0.0'
playServicesVersion = '11.6.0'
使用带有 API 21 和真实 Nexus 6P 运行 API 27 的 AVD 重现了该问题。似乎字体缓存存在问题。我该如何解决或更好地调查此问题?
到目前为止,除了使用离线字体外,我还没有找到解决问题的方法。在这种情况下,我用从 Google 字体下载的 font.ttf
文件替换了 font.xml
文件,并删除了清单中的 preloaded_fonts
元标记。这导致 APK 大小增加了大约 200KB(对于 5 种字体)。
我的应用程序通过 Support Library 27.0.2
使用 Android 可下载字体,根据 API Guide on Android Developers 在 XML 上设置自定义字体。除了第一次在屏幕上绘制每个字体系列外,这些字体都会正常应用。
例如:如果我打开 ActivityA
,它的 Toolbar
将使用默认的 Roboto 显示 Tab1
标题,但 Tab2
和 Tab3
将使用我的自定义字体。第二次打开 ActivityA
(没有关闭应用程序)时,问题没有发生,所有选项卡都将使用自定义字体。除了选项卡标题,我还注意到工具栏上的问题。同样的情况:第一次打开后,字体应用正确。
res/values/font_certs.xml
和 res/font/font.xml
文件由 Android Studio 生成,与文档中提供的文件一样:
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
app:fontProviderAuthority="com.google.android.gms.fonts"
app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"
app:fontProviderPackage="com.google.android.gms"
app:fontProviderQuery="Lato" />
这是清单:
<application ...>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>
和res/values/arrays.xml
:
<resources>
<array name="preloaded_fonts">
<item>@font/lato</item>
<item>@font/lato_bold</item>
<item>@font/lato_light</item>
<item>@font/raleway</item>
<item>@font/raleway_semibold</item>
</array>
</resources>
在 AppBarLayout
上使用以下主题应用字体:
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
<item name="android:fontFamily">@font/raleway</item>
<item name="android:gravity">center_horizontal</item>
</style>
该项目使用以下版本:
minSdkVersion = 19
targetSdkVersion = 26
compileSdkVersion = 26
buildToolsVersion = '27.0.0'
playServicesVersion = '11.6.0'
使用带有 API 21 和真实 Nexus 6P 运行 API 27 的 AVD 重现了该问题。似乎字体缓存存在问题。我该如何解决或更好地调查此问题?
到目前为止,除了使用离线字体外,我还没有找到解决问题的方法。在这种情况下,我用从 Google 字体下载的 font.ttf
文件替换了 font.xml
文件,并删除了清单中的 preloaded_fonts
元标记。这导致 APK 大小增加了大约 200KB(对于 5 种字体)。