【问题标题】:App with multiple themes using Jetpack Compose使用 Jetpack Compose 的具有多个主题的应用程序
【发布时间】:2021-04-23 13:56:02
【问题描述】:

我希望我的应用为用户提供深色主题和浅色主题选项,并且应用的主题将成为用户选择的主题。

如何使用 Android Jetpack Compose 完成此任务?

我一直在通过Android codelabs进行应用主题化,发现以下代码sn-p:

@Composable
fun BasicsCodelabTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colors = if (darkTheme) {
        DarkColors
    } else {
        LightColors
    }

    MaterialTheme(colors = colors) {
        content()
    }
}

但上面的代码是为了改变与“系统”主题对应的主题,而不是用户在应用中选择的主题。

【问题讨论】:

    标签: android android-theme android-jetpack-compose


    【解决方案1】:

    只需将darkTheme参数设置为用户定义的值即可。
    isSystemInDarkTheme() 的值只是不传参数的默认值,你也可以随意改变这个实现。

    某事:

    setContent {
        BasicsCodelabTheme(darkTheme = true /*user choice */) {
           //... 
    }
    

    【讨论】:

    • 'BasicsCodelabTheme()' 可组合并不能满足我的要求。它响应用户选择的 SYSTEM 主题,也许是从他们的设备设置中选择的。
    • 我想要让用户从 APP 中选择主题的代码。
    • @SparshDutta 只需将darkTheme 参数设置为用户定义的值即可。 isSystemInDarkTheme() 只是不传参数时定义的默认值。
    • 哎呀。 . . .谢谢!
    • 一个问题 - setContent() 将在创建活动时调用,但用户将在调用 'onCreate()' 后获得选择主题的选项。那么在用户选择主题后我将如何再次调用 setContent() 呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2023-02-11
    • 2021-07-18
    相关资源
    最近更新 更多