跳转到正文
YGJoon
返回

Android Kotlin Compose Material 3 设计体系

编辑文章

Material 3 核心概念

主题配置

@Composable
fun AppTheme(content: @Composable () -> Unit) {
    val context = LocalContext.current
    val colorScheme = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        dynamicDarkColorScheme(context)
    } else {
        darkColorScheme(
            primary = Color(0xFF4CAF50),
            secondary = Color(0xFF80CBC4)
        )
    }

    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography,
        shapes = Shapes,
        content = content
    )
}

Typography 与 Shapes

val Typography = Typography(
    titleLarge = TextStyle(
        fontWeight = FontWeight.Bold,
        fontSize = 22.sp
    ),
    bodyMedium = TextStyle(fontSize = 14.sp)
)

val Shapes = Shapes(
    small = RoundedCornerShape(8.dp),
    large = RoundedCornerShape(topStart = 24.dp, topEnd = 24.dp)
)

Material 3 组件示例

@Composable
fun HomeTopBar(onMenuClick: () -> Unit) {
    CenterAlignedTopAppBar(
        title = { Text("Home") },
        navigationIcon = {
            IconButton(onClick = onMenuClick) {
                Icon(Icons.AutoMirrored.Filled.Menu, contentDescription = "Menu")
            }
        },
        actions = {
            IconButton(onClick = { }) {
                Icon(Icons.Default.Notifications, contentDescription = "Notifications")
            }
        }
    )
}

@Composable
fun ConfirmButton(onClick: () -> Unit) {
    FilledTonalButton(onClick = onClick) {
        Text("确认")
    }
}

自定义颜色角色

val ExtendedColors = staticCompositionLocalOf { ExtendedColorScheme() }

data class ExtendedColorScheme(val warning = Color(0xFFF57C00))

@Composable
fun AppTheme(content: @Composable () -> Unit) {
    val extended = ExtendedColorScheme()
    CompositionLocalProvider(ExtendedColors provides extended) {
        MaterialTheme(content = content)
    }
}

@Composable
fun WarningText(text: String) {
    Text(text, color = ExtendedColors.current.warning)
}

动态颜色策略

设计规范协作

角色工作
设计师提供 Material 3 Design Token
开发者将 Token 映射到主题与组件
QA测试深色模式、字体缩放等

Design Token 示例

--md-sys-color-primary = #6750A4
--md-sys-typescale-title-large-font-family = "Roboto"

通过脚本转换为 Kotlin 常量。

与 XML 协同

常见问题

问题原因解决方案
动态色失效设备版本低于 Android 12提供静态 colorScheme 兜底
组件样式不一致未覆盖所有组件样式使用 MaterialTheme + CompositionLocal 统一样式
字体被覆盖多处定义 Typography集中在单个文件中维护 Typography 配置

总结

Material 3 为 Compose 带来统一的设计语言。通过主题、颜色和组件配置,结合动态颜色与 Design Token,可以为不同品牌与设备打造一致、个性化的视觉体验。与设计团队保持紧密协作,是成功落地 Material 3 的关键。


编辑文章
分享这篇文章:

上一篇
Android Kotlin Compose 动画进阶
下一篇
Android Kotlin Channel 与并发通信模式