无法在 Material Design 3 中使用 LocalContentAlpha 更改文本强调

Meh*_*iya 10 android android-jetpack-compose android-jetpack-compose-text material-you material-design-3

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

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

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

但是,相同的代码不适用于 Material Design 3,并且文本具有默认强调。另外,我在Material Design 3中找不到相关功能。我想知道是否有任何官方方法可以达到相同的效果。

Chr*_*acy 10

Compose 中从 Material 2 迁移到 Material 3 中的“重点和内容 alpha ”部分详细介绍了 API 更改。

\n

材质2:

\n
import androidx.compose.material.ContentAlpha\nimport androidx.compose.material.LocalContentAlpha\n\n// High emphasis\nCompositionLocalProvider(LocalContentAlpha provides ContentAlpha.high) {\n    Icon(\xe2\x80\xa6)\n}\n// Medium emphasis\nCompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {\n    Icon(\xe2\x80\xa6)\n}\n// Disabled emphasis\nCompositionLocalProvider(LocalContentAlpha provides ContentAlpha.disabled) {\n    Icon(\xe2\x80\xa6)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

材质3:

\n
import androidx.compose.material3.LocalContentColor\n\n// High emphasis\nCompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface) {\n    Icon(\xe2\x80\xa6)\n}\n// Medium emphasis\nCompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurfaceVariant) {\n    Icon(\xe2\x80\xa6)\n}\n// Disabled emphasis\nCompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f)) {\n    Icon(\xe2\x80\xa6)\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Phi*_*hov 9

MaterialTheme.typography.h6来自材质 2,这意味着您也在使用Text材质 2 中的可组合项。

材料 3 的类似物h6MaterialTheme.typography.headlineSmall

确保您正确导入了TextMaterialTheme- 这些应该从androidx.compose.material3包中导入。另请确保您提供正确导入的主题,例如此处

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

另请注意,LocalContentAlphaM3 中不存在此功能,提供 M2 版本不会对 M3 视图产生影响。您可以比较可组合性如何确定M2M3Text中的颜色。

我不确定它是否会在以后添加(毕竟它是 alpha),或者它在 M3 中以其他方式处理,这里有一个解决方法(这肯定不是完美的):

CompositionLocalProvider(LocalContentColor provides LocalContentColor.current.copy(alpha = 0.4f)) {
Run Code Online (Sandbox Code Playgroud)

psLocalContentColor也需要从M3导入