【问题标题】:Jetpack compose get FontFamily from resourcesJetpack compose 从资源中获取 FontFamily
【发布时间】:2021-10-22 07:37:01
【问题描述】:

res/font 我已经这样定义font-family

<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400" app:font="xyz_1"/>
    <font app:fontStyle="normal" app:fontWeight="500" app:font="xyz_2"/>
</font-family>

如何在 Jetpack Compose 中加载它并将其用作 FontFamily 对象?

【问题讨论】:

  • 试试这个解决方案:stackoverflow.com/a/69044509/10954249
  • 这很奇怪,但是当我尝试这样做并将字体粗细设置为中等时,它不会改变任何东西
  • 您能否将代码添加到您的问题中以便更好地理解?
  • 如果您仍想保留 XML,我可能有一个解决方法,虽然它不受支持,但它包含一些遗留 API。像 android.graphics.* 而不是他们的 Compose Equivalents。这适用于 Text 之类的东西,但可能需要修改输入字段。

标签: android android-jetpack-compose android-theme


【解决方案1】:

不幸的是,目前还没有一个直接的解决方案可以直接在 xml 中加载 Font-Familys。

我会考虑以下选项:

  1. 在xml中为主题定义材料设计文本样式(body1、body2等)并使用MDC-theme adapter将它们迁移到MaterialTheme.typography
  2. 上述内容可能不适用于特殊字体系列,例如徽标或其他用例。在这种情况下,我会为撰写重新创建 FontFamily:
private val appFontFamily = FontFamily(
   fonts = listOf(
       Font(
           resId = R.font.roboto_black, 
           weight = FontWeight.W900, 
           style = FontStyle.Normal
       ),
       Font(
           resId = R.font.roboto_black_italic, 
           weight = FontWeight.W900, 
           style = FontStyle.Italic
       ),
       Font(
           resId = R.font.roboto_bold, 
           weight = FontWeight.W700, 
           style = FontStyle.Normal
       ),
       ...
   )
)

这是一个很好的阅读:https://alexzh.com/jetpack-compose-theme-and-typography/。也可以得到启发并为 Mdc 主题适配器做出贡献,以涵盖主题之外的这些特殊用例。我想阅读文本样式进行撰写的逻辑已经存在,只需提供一个 API 即可读取自定义样式,而不是 Material Theme 中指定的样式。

【讨论】:

  • 感谢您的回答。但问题是,在我的应用程序中,我有一个核心库,其中包含一些用 compose 制作的视图。该库用于其他应用程序,并且每个应用程序必须使用不同的字体。要在库中解决此问题,我可以添加字体xyz,然后在使用此库的应用程序中添加我想要的名称为xyz 的字体,字体将被覆盖。但我认为这不是最好的方法。
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 2021-10-18
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多