我的应用程序通过Support Library 27.0.2
使用 Android 可下载字体在 XML 上设置自定义字体,根据 Android 开发人员的 API 指南。除第一次在屏幕上绘制每个字体系列外,字体将正常应用。
例如:如果我打开ActivityA
,它的Toolbar
将显示带有默认 RobotoTab1
标题,但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 的 AVD 和运行 API 27 的真实 Nexus 6P 重现了该问题。字体缓存似乎有问题。如何修复它或更好地调查此问题?
到目前为止,除了使用离线字体之外,我还没有找到解决问题的方法。在这种情况下,我将font.xml
文件替换为从 Google 字体下载的font.ttf
文件,并删除了清单中的preloaded_fonts
元标记。这导致APK大小增加了约200KB(适用于5种字体)。