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

如何在Jetpack Compose中为应用所有Text()元素设置默认字体?

在Jetpack Compose中全局统一Text组件字体的方法

你现在手动给每个Text设置样式,想改成全局统一配置不用逐个设置?在Compose里不用像XML那样自定义TextView,直接通过修改全局主题的Typography就能实现,步骤如下:

1. 定义全局自定义Typography

首先在你的Theme.kt文件里,先引入自定义字体(用系统字体可跳过这步),然后创建全局的Typography配置,把所有文本样式的字体统一设置好:

// 先把字体文件放到res/font目录下,再引入自定义字体族
private val MyCustomFontFamily = FontFamily(
    Font(R.font.your_custom_font_regular),
    Font(R.font.your_custom_font_bold, FontWeight.Bold)
)

// 定义全局Typography,统一字体和样式参数
private val AppTypography = Typography(
    defaultFontFamily = MyCustomFontFamily, // 设置全局默认字体
    // 逐个配置预设文本样式,比如你用到的h2
    h2 = TextStyle(
        fontSize = 20.sp,
        fontWeight = FontWeight.Normal
    ),
    body1 = TextStyle(
        fontSize = 16.sp,
        fontWeight = FontWeight.Normal
    ),
    // 其他需要用到的样式(如button、caption等)都可以在这里统一配置
)

2. 将自定义Typography应用到全局主题

把上面定义的Typography替换到MaterialTheme中:

@Composable
fun YourAppTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme
    
    MaterialTheme(
        colorScheme = colorScheme,
        typography = AppTypography, // 应用全局Typography配置
        content = content
    )
}

3. 使用全局样式的Text组件

之后所有Text组件都会自动继承全局样式,不用再手动设置fontFamily、fontSize这些参数:

// 直接使用,自动应用全局body1样式
Text(text = stringResource(id = R.string.userName))

// 如果需要用特定样式比如h2,直接调用主题里的预设样式
Text(
    text = stringResource(id = R.string.userName),
    style = MaterialTheme.typography.h2
)

这样就实现了全局统一字体,效果和XML里自定义TextView一致,但Compose通过主题控制更简洁,不用额外编写自定义组件。

内容的提问来源于stack exchange,提问作者Ajith M A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:15:39