主题中的字体系列资源不适用于 TextView

Font family resource from theme not applied to TextViews

我想设置几个TextViewsandroid:textAppearance。为此,我声明了以下样式:

<style name="TextAppearance.MyTheme.Headline1" parent="TextAppearance.MaterialComponents.Headline1">
    <item name="android:fontFamily">@font/montserrat</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textFontWeight">400</item>
    <item name="android:textSize">@dimen/text_size_215</item>
</style>

在我的主题中,所述样式将设置为 textAppearanceHeadlineattr,如下所示:

<item name="textAppearanceHeadline1">@style/TextAppearance.MyTheme.Headline1</item>

字体族XML是这样写的:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <font
        app:fontStyle="normal"
        app:fontWeight="200"
        app:font="@font/montserrat_extralight" />

    <font
        app:fontStyle="normal"
        app:fontWeight="400"
        app:font="@font/montserrat_regular" />

    <font
        app:fontStyle="normal"
        app:fontWeight="500"
        app:font="@font/montserrat_medium" />

    <font
        app:fontStyle="normal"
        app:fontWeight="600"
        app:font="@font/montserrat_semibold" />
</font-family>

所有 @font/montserrat_* 参考文献都是我包含在资源文件夹中的 .ttf 文件。然后,我将使用上述 attr 值将样式设置为 TextView 我想要这样的样式:

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Writing Words"
    android:textAppearance="?attr/textAppearanceHeadline1"
    app:layout_constraintEnd_toEndOf="@+id/headingView"
    app:layout_constraintStart_toStartOf="@+id/headingView"
    app:layout_constraintTop_toBottomOf="@+id/headingView" />

问题是,字体系列和字体粗细应用不正确(它们更改为默认字体系列和字体粗细)。大小已正确应用。我是不是做错了什么?

更新

当我尝试仅将 android:textAppearancestyle 设置为 TextView?attr/textAppearanceHeadline1 时,它不会设置字体系列和字体粗细。但是,当我将 android:fontFamilyandroid:fontWeightandroid:textAppearance 一起设置时,它会起作用。将它们设置在 style 旁边是行不通的。为什么呢?发生什么事了?

可能在您的 xml 中存在 viewGroup(其中您的 TextView 的子视图之一)具有 android:fontFamily 覆盖您的 android:textAppearance

的样式

显然,我还必须覆盖 fontFamily。以我的风格覆盖 fontFamily 使其完美无缺。样式变成如下

<style name="TextAppearance.MyTheme.Headline1" parent="TextAppearance.MaterialComponents.Headline1">
    <item name="fontFamily">@font/montserrat</item>
    <item name="android:fontFamily">@font/montserrat</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textFontWeight">400</item>
    <item name="android:textSize">@dimen/text_size_215</item>
</style>