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

如何在Jetpack Compose中禁止特定页面Text随系统字体大小放大

方案1:仅针对计时器Text组件固定大小,不影响同页面其他组件

只需要修改Text的fontSize计算逻辑,强制忽略系统字体缩放系数:

HorizontalPager(state = pagerState, dragEnabled = dragEnabled) { page ->
    val timeInSeconds = abs(steps[page % steps.size] / 1000L)
    val minutes = (timeInSeconds / 60).toString().padStart(2, '0')
    val seconds = (timeInSeconds % 60).toString().padStart(2, '0')
    // 生成忽略字体缩放的Density实例
    val noScaleDensity = LocalDensity.current.run { 
        Density(density = density, fontScale = 1f) 
    }

    Text(
        modifier = Modifier.fillMaxWidth(0.85f),
        text = stringResource(R.string.pomodoro_active_notification_content_body, minutes, seconds),
        textAlign = TextAlign.Center,
        // 使用无缩放的Density转换字体大小
        fontSize = with(noScaleDensity) { LocalDimens.current.intervalTimeFontSize.toSp() },
        style = MaterialTheme.typography.h1,
        // 额外加一层保险,防止极端情况换行
        maxLines = 1
    )
}

方案2:针对整个计时器页面区域禁用字体缩放

如果整个计时器页面的内容都不需要跟随系统字体放大,可以在外层包裹CompositionLocalProvider覆盖局部的字体缩放系数,内部原有代码不需要做任何修改:

CompositionLocalProvider(
    LocalDensity provides LocalDensity.current.run {
        Density(density = density, fontScale = 1f)
    }
) {
    // 原有HorizontalPager代码完全不变
    HorizontalPager(state = pagerState, dragEnabled = dragEnabled) { page ->
        val timeInSeconds = abs(steps[page % steps.size] / 1000L)
        val minutes = (timeInSeconds / 60).toString().padStart(2, '0')
        val seconds = (timeInSeconds % 60).toString().padStart(2, '0')

        Text(
            modifier = Modifier.fillMaxWidth(0.85f),
            text = stringResource(R.string.pomodoro_active_notification_content_body, minutes, seconds),
            textAlign = TextAlign.Center,
            fontSize = LocalDimens.current.intervalTimeFontSize,
            style = MaterialTheme.typography.h1
        )
    }
}

实现原理

Compose中默认的sp单位会自动乘以系统设置的fontScale系数来适配字体大小,我们通过手动将局部的fontScale固定为1,即可让这部分组件的字体大小完全按照代码中定义的数值显示,不会跟随系统无障碍字体设置发生变化,且完全不影响应用内其他页面的字体缩放逻辑。


参考图示:
布局正常的Compose页面
系统字体设置页
布局错乱的Compose页面


内容的提问来源于stack exchange,提问作者Poliziano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:57:04