【发布时间】:2021-09-08 18:29:53
【问题描述】:
我的应用中有一个显示计时器的屏幕。如果用户决定在设备设置菜单中增加字体大小,那么文本对于布局来说变得太大并且开始换行。对于我的其他文字较多的屏幕来说,这不是问题。对于这个屏幕 - 并且只有这个屏幕 - 如果使用辅助功能选项,我希望防止计时器文本变大。
如果添加上下文,有问题的代码如下所示:
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
)
}
【问题讨论】:
-
你需要在
dp而不是sp中指定字体大小,我确信MaterialTheme使用sp。 -
如果这是您希望应用此代码更改的唯一屏幕,为什么不直接声明顶级
val并硬编码屏幕的大小?只需使用 AS 用新 val 替换旧引用的所有实例,我认为你很好。 -
@CommonsWare 可组合的
Text不接受dp,只接受TextUnit,它是sp或em。 -
是的,我认为您必须进行一些转换才能撤消文本比例。假设您想要
16dp,并且用户的文本比例为 1.5 倍。如果你尝试使用16.sp,你会得到24dp的实际大小。您可以获得当前的文本比例(LocalConfigurationIIRC)。因此,您将计算“反缩放”大小 = 16 / 1.5 = 10.66 并将.sp应用于它,因此当应用文本比例时,您将获得所需的16dp大小。
标签: android kotlin android-jetpack-compose