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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:09:02