Jetpack Compose 使用 Material 3 从 MaterialTheme 获取浅色模式与深色模式

Ral*_*gha 13 android material-components-android android-jetpack-compose

借助 Jetpack Compose,使用 Material 2,您可以使用以下命令轻松查看主题是否处于浅色模式

val light = MaterialTheme.colors.isLight
Run Code Online (Sandbox Code Playgroud)

使用材质 3,我看不到这种能力。有没有办法用 Material 3 主题做到这一点?

Ral*_*gha 13

找到了解决方案。ColorCompose 有一个内置方法luminance,它以 0 到 1 之间的浮点形式返回相对亮度。我编写了一个扩展函数,ColorScheme如果背景亮度大于 0.5,则返回 true。

@Composable
fun ColorScheme.isLight() = this.background.luminance() > 0.5
Run Code Online (Sandbox Code Playgroud)

将其用作:

val isLight = MaterialTheme.colorScheme.isLight()
Run Code Online (Sandbox Code Playgroud)

现在系统是否处于深色模式并不重要,重要的是主题。


小智 8

在 JetpackCompose 中,您可以使用此方法,该方法返回是否启用了明/暗模式

isSystemInDarkTheme()
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

if (isSystemInDarkTheme()){} \\Dark mode enabled
else {} //Light mode enabled 
Run Code Online (Sandbox Code Playgroud)

  • 我使用它作为解决方法,但主题可以是浅色或深色,与系统无关,所以我希望有某种方法可以看到这一点。 (6认同)