更新应用主题和颜色配置

This commit is contained in:
徐在坤
2026-01-17 19:34:55 +08:00
parent 8bb8a05898
commit bbb701f583
2 changed files with 65 additions and 36 deletions

View File

@@ -2,21 +2,23 @@ package com.huaga.life_echo.ui.theme
import androidx.compose.ui.graphics.Color
// New color scheme based on design
val DeepPurple = Color(0xFF200028)
val SlatePurple = Color(0xFF8C8EA3)
val MediumPurple = Color(0xFFA177A6)
val Lavender = Color(0xFFCEB0DA)
val Blush = Color(0xFFDBBABA)
val Cream = Color(0xFFFAF7F8)
// 浅紫色配色方案 - 基于UI样例图
val LightPurple = Color(0xFFB18FCE) // 主要浅紫色,用于标题栏和强调元素
val LightPurpleAlt = Color(0xFFC8A2C8) // 替代浅紫色
val DeepPurple = Color(0xFF6B4C93) // 深紫色,用于标题和选中状态
val LightPurpleBackground = Color(0xFFF5F0F8) // 浅紫色背景
val White = Color(0xFFFFFFFF)
val LightGray = Color(0xFFE0E0E0) // 浅灰色,用于未选中状态
val DarkGray = Color(0xFF424242) // 深灰色,用于主要文字
val MediumGray = Color(0xFF9E9E9E) // 中等灰色,用于辅助文字
val LightGrayText = Color(0xFFBDBDBD) // 浅灰色文字
// For dark theme
val Purple80 = Lavender
val PurpleGrey80 = SlatePurple
val Pink80 = Blush
val Purple80 = LightPurple
val PurpleGrey80 = MediumGray
val Pink80 = LightPurpleAlt
// For light theme
val Purple40 = MediumPurple
val PurpleGrey40 = SlatePurple
val Pink40 = Blush
val Purple40 = DeepPurple
val PurpleGrey40 = MediumGray
val Pink40 = LightPurple

View File

@@ -9,53 +9,80 @@ import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.sp
import com.huaga.life_echo.ui.settings.AppSettings
private val DarkColorScheme = darkColorScheme(
primary = Lavender,
secondary = SlatePurple,
tertiary = Blush,
background = DeepPurple,
surface = DeepPurple,
onPrimary = DeepPurple,
primary = LightPurple, // 保持浅紫色主色不变
secondary = LightPurpleAlt,
tertiary = LightPurple,
background = Color(0xFF000000), // 黑色背景
surface = Color(0xFF000000), // 黑色表面
onPrimary = White,
onSecondary = White,
onTertiary = DeepPurple,
onBackground = White,
onSurface = White
onTertiary = White,
onBackground = White, // 白色文字在黑色背景上
onSurface = White // 白色文字在黑色表面上
)
private val LightColorScheme = lightColorScheme(
primary = MediumPurple,
secondary = SlatePurple,
tertiary = Blush,
background = Cream,
primary = LightPurple, // 浅紫色作为主色
secondary = LightPurpleAlt,
tertiary = LightPurple,
background = White, // 白色背景
surface = White,
onPrimary = White,
onSecondary = DeepPurple,
onTertiary = DeepPurple,
onBackground = DeepPurple,
onSurface = DeepPurple
onPrimary = White, // 白色文字在紫色背景上
onSecondary = White,
onTertiary = White,
onBackground = DarkGray, // 深灰色文字在白色背景上
onSurface = DarkGray
)
@Composable
fun LifeechoTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
darkTheme: Boolean? = null, // 如果为null则使用AppSettings中的值
// Dynamic color is available on Android 12+
dynamicColor: Boolean = true,
dynamicColor: Boolean = false, // 禁用动态颜色以保持浅紫色主题
content: @Composable () -> Unit
) {
// 使用AppSettings中的状态这样当设置变化时会触发重组
val isDarkMode = darkTheme ?: AppSettings.rememberDarkMode()
val isLargeFont = AppSettings.rememberLargeFontMode()
val colorScheme = when {
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val context = LocalContext.current
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
if (isDarkMode) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
}
darkTheme -> DarkColorScheme
isDarkMode -> DarkColorScheme
else -> LightColorScheme
}
// 根据大字模式调整字体大小
val adjustedTypography = if (isLargeFont) {
Typography.copy(
bodyLarge = Typography.bodyLarge.copy(fontSize = 18.sp),
bodyMedium = Typography.bodyMedium.copy(fontSize = 16.sp),
bodySmall = Typography.bodySmall.copy(fontSize = 14.sp),
titleLarge = Typography.titleLarge.copy(fontSize = 24.sp),
titleMedium = Typography.titleMedium.copy(fontSize = 20.sp),
titleSmall = Typography.titleSmall.copy(fontSize = 18.sp),
headlineLarge = Typography.headlineLarge.copy(fontSize = 32.sp),
headlineMedium = Typography.headlineMedium.copy(fontSize = 28.sp),
headlineSmall = Typography.headlineSmall.copy(fontSize = 24.sp)
)
} else {
Typography
}
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
typography = adjustedTypography,
content = content
)
}