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

