0
点赞
收藏
分享

微信扫一扫

kotlin when的用法

1、有这样一段代码

@Composable
fun BasicsCodelabTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    // Dynamic color is available on Android 12+
    dynamicColor: Boolean = true,
    content: @Composable () -> Unit
) {
    val colorScheme = when {
        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
            val context = LocalContext.current
            if (darkTheme) dynamicDarkColorScheme(context)
            else
                dynamicLightColorScheme(context)
        }
        darkTheme -> DarkColorScheme
        else -> LightColorScheme
    }
    val view = LocalView.current
    if (!view.isInEditMode) {
        SideEffect {
            (view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb()
            ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = darkTheme
        }
    }

    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography,
        content = content
    )
}

说明

该代码定义了BasicsCodelabTheme 的函数,用于设置应用的主题样式,包括颜色方案和材质设计主题。功能分解如下:

  1. 根据是否启用动态颜色和系统版本,选择动态颜色方案或默认颜色方案。
  2. 如果视图不在编辑模式下,通过 SideEffect 设置状态栏颜色和亮度模式。
  3. 使用 MaterialTheme 包装内容组件,提供颜色方案和 typography。


when的基本用法:

when (subject) {
    condition1 -> result1
    condition2 -> result2
    else -> defaultResult
}

说明

  1. subject:可选部分,表示要匹配的值或表达式。
  2. condition:每个分支的条件,可以是常量、表达式或类型检查。
  3. result:当对应的条件为真时执行的代码块。
  4. else:默认分支,当没有条件匹配时执行。


代码片段中的when:

val colorScheme = when {
    dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
        val context = LocalContext.current
        if (darkTheme) dynamicDarkColorScheme(context)
        else dynamicLightColorScheme(context)
    }
    darkTheme -> DarkColorScheme
    else -> LightColorScheme
}

说明

无 subject 的 when

这里的 when 没有指定 subject,而是直接通过条件表达式来判断。

每个条件是一个布尔表达式,只有当条件为 true 时,对应的代码块才会执行。


条件分支

第一个条件:dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S

如果动态颜色启用 (dynamicColor) 且系统版本支持动态颜色 (Android 12+),则根据 darkTheme 的值选择动态深色或浅色方案。

第二个条件:darkTheme

如果当前主题是深色模式,则使用默认深色方案 (DarkColorScheme)。

默认分支:else

如果以上条件都不满足,则使用默认浅色方案 (LightColorScheme)。

返回值

when 表达式的每个分支都会返回一个值,最终 colorScheme 被赋值为匹配条件的结果。




举报

相关推荐

0 条评论