Jetpack Compose如何从res/font资源加载自定义FontFamily对象
Jetpack Compose 加载res/font目录下XML字体族的实现方法
首先确认你已将xyz_1、xyz_2对应的实际字体文件(.ttf/.otf格式)和你编写的font-family XML文件(假设命名为xyz_font_family.xml)都放在res/font目录下。
实现方式1:手动匹配字体权重(全版本兼容)
所有Compose版本都支持该方案,和你XML中的配置一一对应声明字体即可:
import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight val XyzFontFamily = FontFamily( // 对应XML中fontWeight=400的xyz_1字体 Font(R.font.xyz_1, FontWeight.Normal), // 对应XML中fontWeight=500的xyz_2字体 Font(R.font.xyz_2, FontWeight.Medium) )
实现方式2:直接引用XML字体族文件(Compose 1.2.0+支持)
如果你的Compose版本高于等于1.2.0,可以直接引用XML文件的资源ID创建FontFamily,无需手动逐个声明字体:
val XyzFontFamily = FontFamily(R.font.xyz_font_family)
该方式会自动读取XML中配置的字体样式、权重和字体文件的映射关系,和原生View体系使用XML字体族的逻辑一致。
使用示例
你可以直接在Text组件或者全局主题的Typography中使用创建好的FontFamily:
// 单个Text组件使用 Text( text = "自定义字体测试", fontFamily = XyzFontFamily, fontWeight = FontWeight.Medium // 自动匹配到xyz_2字体 ) // 配置到全局主题,所有文本默认使用该字体 val AppTypography = Typography( defaultFontFamily = XyzFontFamily, // 其他文本样式配置... )
内容的提问来源于stack exchange,提问作者iknow
相关产品推荐
相关产品推荐

