Composable 是 Jetpack Compose 的核心概念之一,它是一种可组合的 UI 组件。Jetpack Compose 是 Android 开发中的一个现代 UI 工具包,旨在简化 UI 开发过程。通过 Composable,你可以将 UI 拆分为多个可重用的组件,这些组件可以独立地构建和更新。
remember
和 mutableStateOf
来管理当前主题状态。import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
@Composable
fun MyAppTheme(content: @Composable () -> Unit) {
val isDarkTheme = remember { mutableStateOf(isSystemInDarkTheme()) }
val colors = if (isDarkTheme.value) {
DarkColorPalette
} else {
LightColorPalette
}
MaterialTheme(
colors = colors,
content = content
)
}
object LightColorPalette {
val primary = MaterialTheme.colors.primary
val background = MaterialTheme.colors.background
val surface = MaterialTheme.colors.surface
val onPrimary = MaterialTheme.colors.onPrimary
val onBackground = MaterialTheme.colors.onBackground
val onSurface = MaterialTheme.colors.onSurface
}
object DarkColorPalette {
val primary = MaterialTheme.colors.primaryVariant
val background = MaterialTheme.colors.background
val surface = MaterialTheme.colors.surfaceVariant
val onPrimary = MaterialTheme.colors.onPrimaryVariant
val onBackground = MaterialTheme.colors.onBackgroundVariant
val onSurface = MaterialTheme.colors.onSurfaceVariant
}
@Composable
fun ThemeSwitcher(onThemeChange: (Boolean) -> Unit) {
val isDarkTheme = remember { mutableStateOf(isSystemInDarkTheme()) }
val toggleTheme = {
isDarkTheme.value = !isDarkTheme.value
onThemeChange(isDarkTheme.value)
}
// 这里可以添加一个按钮或其他 UI 元素来触发主题切换
// 例如:Button(onClick = toggleTheme) { Text("Toggle Theme") }
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
MyAppTheme {
Surface(color = MaterialTheme.colors.background) {
Text(text = "Hello, World!")
}
}
}
通过上述步骤和示例代码,你可以在 Android 应用中使用 Jetpack Compose 动态切换明暗主题。关键在于管理主题状态并使用 MaterialTheme
来应用这些主题。
领取专属 10元无门槛券
手把手带您无忧上云