fontFamily 和 fontWeight 在 TextAppearance 中不起作用

问题描述 投票:0回答:1

我正在尝试在我的应用程序中添加多个字体系列。以下是添加“inter”字体的代码。

这里

values/typography.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="textAppearanceDisplayLargeBold" format="reference" />
    <attr name="textAppearanceDisplayLargeSemiBold" format="reference" />
    <attr name="textAppearanceDisplayLargeMediumBold" format="reference" />

    <style name="TextAppearance.App.DisplayLarge" parent="TextAppearance.Material3.DisplayLarge">
        <item name="fontFamily">@font/inter_font_family</item>
        <item name="fontWeight">400</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.Bold">
        <item name="fontWeight">700</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.SemiBold">
        <item name="fontWeight">600</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.Medium">
        <item name="fontWeight">500</item>
    </style>

</resources>

这里

font/inter_font_family.xml

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font
        app:font="@font/inter_regular"
        app:fontStyle="normal"
        app:fontWeight="400" />
    <font
        app:font="@font/inter_medium"
        app:fontStyle="normal"
        app:fontWeight="500" />
    <font
        app:font="@font/inter_semibold"
        app:fontStyle="normal"
        app:fontWeight="600" />
    <font
        app:font="@font/inter_bold"
        app:fontStyle="normal"
        app:fontWeight="700" />
</font-family>

这里

themes.xml

<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">

    <item name="textAppearanceDisplayLarge">@style/TextAppearance.App.DisplayLarge</item>
    <item name="textAppearanceDisplayLargeBold">
        @style/TextAppearance.App.DisplayLarge.Bold
    </item>
    <item name="textAppearanceDisplayLargeSemiBold">
        @style/TextAppearance.App.DisplayLarge.SemiBold
    </item>
    <item name="textAppearanceDisplayLargeMediumBold">
        @style/TextAppearance.App.DisplayLarge.Medium
    </item>
</style>

我的主要问题是

fontWeight
TextAppearance
样式中没有效果。如果我在
TextAppearance
样式中设置单独的字体(inter_bold、inter_light 等),它就会工作并显示正确的字体。

android material-design android-theme
1个回答
0
投票

不幸的是,在

fontWeight
样式中指定字体系列时,可能无法正确应用
TextAppearance
属性。

顺便说一句,您可以在typography.xml 文件中为每个字体粗细定义单独的样式。见下图:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextAppearance.App.DisplayLarge" parent="TextAppearance.Material3.DisplayLarge">
        <item name="fontFamily">@font/inter_regular</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.Bold">
        <item name="fontFamily">@font/inter_bold</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.SemiBold">
        <item name="fontFamily">@font/inter_semibold</item>
    </style>

    <style name="TextAppearance.App.DisplayLarge.Medium">
        <item name="fontFamily">@font/inter_medium</item>
    </style>
</resources>

在此示例中,每个

TextAppearance
样式显式指定所需的字体文件。这样,
fontWeight
属性应该具有预期的效果,因为它现在应用于特定的字体文件。

确保更新 theme.xml 文件以合并这些样式:

<style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
    <item name="textAppearanceDisplayLarge">@style/TextAppearance.App.DisplayLarge</item>
    <item name="textAppearanceDisplayLargeBold">@style/TextAppearance.App.DisplayLarge.Bold</item>
    <item name="textAppearanceDisplayLargeSemiBold">@style/TextAppearance.App.DisplayLarge.SemiBold</item>
    <item name="textAppearanceDisplayLargeMediumBold">@style/TextAppearance.App.DisplayLarge.Medium</item>
</style>

这应该可以解决

fontWeight
属性不生效的问题。现在,每个
TextAppearance
样式都明确指定字体文件,允许您控制字体系列和粗细。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.