使用Material Design 3,无法通过LocalContentAlpha更改文本强调。

8

目前,我正在将我的一个应用迁移到完全使用Jetpack Compose编写的Material Design 3中。

在使用Material Design 2时,我可以使用以下代码更改文本的重点。

CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
                Text(
                    text = "Hello, world",
                    style = MaterialTheme.typography.h6,
                    fontWeight = FontWeight.SemiBold,
                )
            }

然而,同样的代码在Material Design 3中不起作用,文本具有默认的强调。此外,我无法找到任何与Material Design 3相关的函数。我想知道是否有任何官方方法来实现相同的效果。

2个回答

8

MaterialTheme.typography.h6来自于Material 2,这意味着您也在使用Material 2中的Text组合。

在Material 3中,h6的对应项是MaterialTheme.typography.headlineSmall

确保正确导入了TextMaterialTheme - 它们应该从androidx.compose.material3包中导入。同时,请确保提供了一个正确导入的主题,例如此处

错误的导入是迁移到M3时最常见的错误,因此请耐心处理。

此外,请注意LocalContentAlpha在M3中不存在,在M2中提供它的版本对M3视图没有影响。您可以比较一下Text组合在M2M3中如何确定其颜色。

我不确定它是否会在以后被添加(毕竟它还处于alpha版本),或者在M3中用其他方式处理,这里提供一种解决方法(肯定不完美):

CompositionLocalProvider(LocalContentColor provides LocalContentColor.current.copy(alpha = 0.4f)) {

提示:还需要从 M3 导入 LocalContentColor


6
在 Compose 中从 Material 2 迁移到 Material 3”中的“强调和内容 alpha”部分详细说明了 API 更改。”
“Material2:”
import androidx.compose.material.ContentAlpha
import androidx.compose.material.LocalContentAlpha

// High emphasis
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.high) {
    Icon(…)
}
// Medium emphasis
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
    Icon(…)
}
// Disabled emphasis
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.disabled) {
    Icon(…)
}

材料3:
import androidx.compose.material3.LocalContentColor

// High emphasis
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) {
    Icon(…)
}
// Medium emphasis
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant) {
    Icon(…)
}
// Disabled emphasis
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f)) {
    Icon(…)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接