You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中TextAppearance的fontFamily与fontWeight设置无效问题

Android Inter字体族配置:fontWeight无效问题

问题背景

我正在给应用添加多字体族,配置Inter字体的相关代码如下,但遇到核心问题:TextAppearance样式中的fontWeight设置完全无效,不过如果直接在TextAppearance样式中指定单独字体(如inter_bold、inter_light等),则能正常显示对应字体。

配置代码

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>

解决办法

1. 修复font-family的命名空间

inter_font_family.xml中误用了app:命名空间,Android系统的font-family标签需要使用android:前缀,修改后如下:

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

2. 让TextAppearance子样式继承父样式

子样式(Bold/SemiBold/Medium)没有继承父样式的fontFamily,导致只设置fontWeight时找不到对应字体族。修改子样式的parent属性:

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

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

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

3. 验证字体文件完整性

确认res/font/目录下存在inter_regular.ttf、inter_medium.ttf、inter_semibold.ttf、inter_bold.ttf这几个字体文件,文件名和xml引用完全一致(Android资源文件名大小写敏感)。

4. 检查主题样式覆盖

确保AppTheme中没有其他样式或属性覆盖了fontFamily设置,同时确认Material3主题的兼容性,避免样式冲突。

内容的提问来源于stack exchange,提问作者rupinderjeet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:33:37