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

向androidx.glance.text.FontFamily传入什么字符串指定自定义字体?

如何给androidx.glance.text.FontFamily指定自定义字体?

当你通过@font/open_sans_regular导入自定义字体后,直接传入字体文件的名称(不带扩展名)即可,也就是你例子里的"open_sans_regular"。

原理说明

从你提供的FontFamily源码可以看到,这个类通过传入的字符串family匹配系统中已存在的字体:

  • 如果系统能找到名称匹配的字体(包括你导入到项目res/font目录下的自定义字体),就会加载使用该字体;
  • 如果找不到匹配项,就会自动回退到系统默认字体。

Android会将res/font目录下的字体文件,以**文件名(不含后缀)**作为字体族名称进行注册,所以直接传入文件名就能正确识别。

使用示例

假设你已将open_sans_regular.ttf放入res/font目录,使用时代码如下:

// 创建自定义字体族实例
val openSansRegular = FontFamily("open_sans_regular")

// 在Glance文本组件中应用
Text(
    text = "这是Open Sans常规体",
    style = TextStyle(fontFamily = openSansRegular)
)

注意事项

  • 字体文件名必须符合Android资源命名规范:只能使用小写字母、数字、下划线(_)和连字符(-);
  • 若你的字体包含多个变体(如粗体、斜体),需要分别导入对应的字体文件(比如open_sans_bold.ttf),并创建对应的FontFamily实例传入文件名。

附你提供的FontFamily源码:

/**
 * 描述字体的字体系列。
 * 提供了默认选项,但也可以自定义字体系列。如果系统中存在该字体,则会使用它,否则会回退到系统默认字体。
 */
class FontFamily constructor(val family: String) {
    companion object {
        /**
         * 用于文字排版的正式文本样式。
         */
        val Serif = FontFamily("serif")

        /**
         * 低对比度且笔画末端平直的字体系列。
         */
        val SansSerif = FontFamily("sans-serif")

        /**
         * 所有字形宽度固定的字体系列。
         */
        val Monospace = FontFamily("monospace")

        /**
         * 草书、手写风格的字体系列。
         */
        val Cursive = FontFamily("cursive")
    }

    override fun toString(): String {
        return family
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:55:24