主题

基于 Compose Material 3 的浅色、深色和跟随系统主题。

Kotlin 模板使用 Compose Material 3:自定义 light/dark color schemes、DataStore 持久化主题选择、 可选 Material You dynamic color,以及跟随当前主题的 edge-to-edge system bars。

提供什么

Surface状态实现
Theme modesIntegratedAppTheme.LightDarkSystem
持久化IntegratedDataStore keys theme_tagdynamic_color_enabled
Material 3 schemeIntegratedSoarStarterKotlinTheme 包裹 MaterialTheme
Dynamic colorIntegratedAndroid 12+ 且启用后可用;默认关闭
System barsIntegratedMainActivity.ApplySystemBarTheme() 更新 SystemBarStyle

关键文件

主题选择

AppTheme 保存三种模式:

Light("light")
Dark("dark")
System("system")

ThemeController 把 DataStore 的 theme_tag 映射为 StateFlow<AppTheme>,并把 dynamic_color_enabled 映射为 StateFlow<Boolean>MainActivity 根据 isSystemInDarkTheme() 解析当前模式,然后把两个值传入 SoarStarterKotlinTheme

Drawer 和 Component gallery 都复用 ThemeToggle,这是一个在 System、Light、Dark 之间切换的 segmented Compose control。

颜色系统

Color.kt 定义:

  • iOS 风格 accent 和 semantic colors,包括 IosTintIosDestructiveIosGreenIosIndigoIosOrange
  • light/dark 的 background、foreground、muted、border、input、ring 基础颜色。
  • ColorScheme extension properties,例如 groupedBackgroundgroupedSurfacegroupedInputlabelSecondaryseparatorSofttint

Theme.kt 用这些 tokens 构建明确的 Material 3 light/dark schemes。如果 dynamic color 启用且设备是 Android 12 或更高,dynamicLightColorScheme() / dynamicDarkColorScheme() 会替代自定义 scheme。

Dynamic color 已实现、已持久化,也传入了 root theme,但默认存储值是 false。如果希望用户使用 Material You 行为,请从你的 settings UI 暴露开关。

字体

Type.kt 自定义 Material 3 typography scale:使用 Android 默认字体、semibold/bold headings, 并设置 letterSpacing = 0.sp。Screens 应使用 MaterialTheme.typography,不要硬编码字号。

Edge-to-edge

MainActivity 调用 enableEdgeToEdge(),并根据解析后的主题使用 SystemBarStyle.dark()SystemBarStyle.light()。这样用户切换主题时 status/navigation bar icons 仍保持可读。

大多数 screen background 使用 MaterialTheme.colorScheme.groupedBackground,保持 starter 的 grouped mobile settings 风格。

Rebrand checklist

  1. 替换 Color.kt 中的 IosTint 和相关 semantic colors。
  2. 调整 Theme.kt 中的 light/dark color schemes。
  3. 如果品牌使用 custom font,修改 Type.kt
  4. 替换 res/drawableres/mipmap-*res/mipmap-anydpi 下的 launcher assets。
  5. 更新 strings.xml 中的 app_name
  6. 创建真实产品 fork 时,修改 applicationId、namespace 和所有 Play/App Links identifiers。
  7. 修改 package name 后,重新检查 LINKING_DOMAINassetlinks.json、release signing、Firebase 和 RevenueCat。

验证

  • 主题选择在进程重启后仍保留。
  • System mode 跟随设备 dark-mode 设置。
  • Dynamic color 只在 Android 12+ 且启用后改变 scheme。
  • Light/dark 下 status 和 navigation bar icons 都保持可读。
  • Launcher icons、display name、package name、App Links 都匹配 rebranded app。

相关页面

On this page