跳到主要内容

字体

动态加载和替换字体。

替换字体

更多信息参见加载资源

回退字体

在 Android 上,为回退字体指定的字体大小会被忽略。平台在运行时会选择最匹配文本样式和动画的系统字体。

从 v9.12.0 起,Android 上可以使用多种回退字体选项。

如果没有注册回退字体,将使用默认系统字体("sans-serif"),常规字重(400,NORMAL),正常样式。

Fonts 类提供了处理和自定义字体的方法,包括获取系统字体、定义字体选项以及根据特定特征查找回退字体。

1. 设置回退字体

v9.12.0 提供了新的 API,通过扩展 FontFallbackStrategy 接口来匹配缺失字体的特定字重。该接口包含一个方法:

fun getFont(weight: Fonts.Weight): List<FontBytes>

实现者需要重写此方法。用户的实现需要通过 FontFallbackStrategy.stylePicker 设置为当前的回退策略。

class FontFallback : AppCompatActivity(), FontFallbackStrategy {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
FontFallbackStrategy.stylePicker = this
}

override fun getFont(weight: Fonts.Weight): List<FontBytes> {
val desiredWeight = weight.weight
val fonts = listOf(
Fonts.FontOpts(
familyName = "sans-serif",
weight = Fonts.Weight(weight = desiredWeight)
),
// 非拉丁 Unicode 回退
Fonts.FontOpts("NotoSansThai-Regular.ttf")
)
return fonts.mapNotNull {
FontHelper.getFallbackFontBytes(it)
}
}
}

2. Font.FontOpts - 字体选项

定义选择回退字体时的字体特征。参数包括:

  • familyName:字体系列名称(如 "Roboto"、"NotoSansThai-Regular.ttf")
  • lang:可选语言规范
  • weight:字体权重,默认 Weight.NORMAL
  • style:字体样式,STYLE_NORMALSTYLE_ITALIC

3. 获取回退字体

val fontOpts = Fonts.FontOpts(familyName = "Roboto", weight = Fonts.Weight.BOLD)
val fallbackFont = FontHelper.getFallbackFont(fontOpts)

4. 获取字体文件和字节

val fontFile = FontHelper.getFontFile(fallbackFont)
val fontBytes = FontHelper.getFontBytes(fallbackFont)

5. 预定义字重

  • Fonts.Weight.NORMAL (400)
  • Fonts.Weight.BOLD (700)
  • Fonts.Weight.fromInt(500) 自定义字重

6. 预定义样式

  • Fonts.Font.STYLE_NORMAL
  • Fonts.Font.STYLE_ITALIC

7. 获取系统字体

val systemFonts = FontHelper.getSystemFonts()