字体
动态加载和替换字体。
替换字体
更多信息参见加载资源。
回退字体
在 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.NORMALstyle:字体样式,STYLE_NORMAL或STYLE_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_NORMALFonts.Font.STYLE_ITALIC
7. 获取系统字体
val systemFonts = FontHelper.getSystemFonts()