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
相关产品推荐
相关产品推荐

