android fontFamily和fontWeight在TextAppearance中不起作用

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

我试图在我的应用程序中添加多个字体系列。以下是添加“inter”字体的代码。
这里是values/typography.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <attr name="textAppearanceDisplayLargeBold" format="reference" />
  4. <attr name="textAppearanceDisplayLargeSemiBold" format="reference" />
  5. <attr name="textAppearanceDisplayLargeMediumBold" format="reference" />
  6. <style name="TextAppearance.App.DisplayLarge" parent="TextAppearance.Material3.DisplayLarge">
  7. <item name="fontFamily">@font/inter_font_family</item>
  8. <item name="fontWeight">400</item>
  9. </style>
  10. <style name="TextAppearance.App.DisplayLarge.Bold">
  11. <item name="fontWeight">700</item>
  12. </style>
  13. <style name="TextAppearance.App.DisplayLarge.SemiBold">
  14. <item name="fontWeight">600</item>
  15. </style>
  16. <style name="TextAppearance.App.DisplayLarge.Medium">
  17. <item name="fontWeight">500</item>
  18. </style>
  19. </resources>

字符串
这里是font/inter_font_family.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <font-family xmlns:app="http://schemas.android.com/apk/res-auto">
  3. <font
  4. app:font="@font/inter_regular"
  5. app:fontStyle="normal"
  6. app:fontWeight="400" />
  7. <font
  8. app:font="@font/inter_medium"
  9. app:fontStyle="normal"
  10. app:fontWeight="500" />
  11. <font
  12. app:font="@font/inter_semibold"
  13. app:fontStyle="normal"
  14. app:fontWeight="600" />
  15. <font
  16. app:font="@font/inter_bold"
  17. app:fontStyle="normal"
  18. app:fontWeight="700" />
  19. </font-family>


这里是themes.xml

  1. <style name="AppTheme" parent="Theme.Material3.Light.NoActionBar">
  2. <item name="textAppearanceDisplayLarge">@style/TextAppearance.App.DisplayLarge</item>
  3. <item name="textAppearanceDisplayLargeBold">
  4. @style/TextAppearance.App.DisplayLarge.Bold
  5. </item>
  6. <item name="textAppearanceDisplayLargeSemiBold">
  7. @style/TextAppearance.App.DisplayLarge.SemiBold
  8. </item>
  9. <item name="textAppearanceDisplayLargeMediumBold">
  10. @style/TextAppearance.App.DisplayLarge.Medium
  11. </item>
  12. </style>


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

ilmyapht

ilmyapht1#

不幸的是,在TextAppearance样式中指定字体系列时,fontWeight属性可能无法正确应用。
顺便说一下,你可以在typography.xml文件中为每个字体粗细定义单独的样式。参见下面:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <style name="TextAppearance.App.DisplayLarge" parent="TextAppearance.Material3.DisplayLarge">
  4. <item name="fontFamily">@font/inter_regular</item>
  5. </style>
  6. <style name="TextAppearance.App.DisplayLarge.Bold">
  7. <item name="fontFamily">@font/inter_bold</item>
  8. </style>
  9. <style name="TextAppearance.App.DisplayLarge.SemiBold">
  10. <item name="fontFamily">@font/inter_semibold</item>
  11. </style>
  12. <style name="TextAppearance.App.DisplayLarge.Medium">
  13. <item name="fontFamily">@font/inter_medium</item>
  14. </style>
  15. </resources>

字符串
在这个例子中,每个TextAppearance样式都显式地指定了所需的字体文件。这样,fontWeight属性应该具有预期的效果,因为它现在应用于特定的字体文件。
确保更新themes.xml文件以包含这些样式:

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


这应该解决了fontWeight属性不起作用的问题。每个TextAppearance样式现在显式指定字体文件,允许您控制字体系列和粗细。
希望有帮助!

展开查看全部

相关问题