前言
开发APP的时候我们可能使用不同的主题,甚至不同主题下的布局也可能发生改变,这样我们就需要在项目创建的时候生成的主题上进行修改来满足我们的需求。
https://developer.android.google.cn/jetpack/compose/designsystems/material3?hl=zh-cn
颜色文件
Color.kt
1 | import androidx.compose.ui.graphics.Color |
主题
Theme.kt
1 | import android.app.Activity |
这里说明几点:
- 这里定义枚举是为了支持更多的主题。
- 使用
MaterialTheme
是为了引用的扁平化组件能跟随主题改变样式。 - 定义
LocalAppTheme
是为了实现不同的主题可以显示不同的布局。
组件中判断使用的主题
1 | // 使用主题 |
使用主题的颜色
1 | MaterialTheme.colorScheme.background |
使用主题的文本样式
1 | MaterialTheme.typography.labelLarge |
使用主题的形状样式
1 | MaterialTheme.shapes.medium |
说明
CompositionLocalProvider
CompositionLocalProvider
是 Jetpack Compose 中的一个重要概念,用于向整个组合树(Compose tree)提供特定类型的值。
在 Compose 中,组合树是由各种组合函数(如 @Composable
标记的函数)构成的层级结构,用于描述应用程序的 UI 层次结构。
CompositionLocalProvider
的作用是将特定类型的值提供给其子组件。这些值在组合树中被视为局部值,并可以被任何子组件使用,而不需要通过显式参数传递。这使得在整个应用程序中共享某些数据变得非常方便,尤其是对于主题、本地化设置、用户身份验证状态等方面的信息。
在给定的组合函数中,可以通过 LocalXXX.current
来获取 CompositionLocalProvider
提供的值,其中 XXX
是您定义的类型。
这使得在组合树中任何地方都能够访问到这些值,而不需要手动传递它们。
总的来说,CompositionLocalProvider
用于在组合树中传递局部值,使得这些值对于整个组合树中的任何组件都可用,而不需要显式传递。
Material3可配置的ColorScheme
1 | class ColorScheme( |
浅色的配色