android fontFamily和fontWeight在TextAppearance中不起作用

8e2ybdfx  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(201)

我试图在我的应用程序中添加多个字体系列。以下是添加“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>


我的主要问题是fontWeightTextAppearance样式中没有效果。如果我在TextAppearance样式中设置单个字体(inter_bold,inter_light等),它就能工作并显示正确的字体。

ilmyapht

ilmyapht1#

不幸的是,在TextAppearance样式中指定字体系列时,fontWeight属性可能无法正确应用。
顺便说一下,你可以在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属性应该具有预期的效果,因为它现在应用于特定的字体文件。
确保更新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样式现在显式指定字体文件,允许您控制字体系列和粗细。
希望有帮助!

相关问题