如何简化MaterialTheme.colors.primary的代码写法?
简化Jetpack Compose中MaterialTheme的写法
当然可以,有几种简单的方式能帮你摆脱重复写MaterialTheme.colorScheme这类冗长代码的麻烦:
方式一:扩展属性
给Composable上下文添加扩展属性,直接映射到MaterialTheme的对应部分:
// 定义扩展属性 val Context.mColor get() = MaterialTheme.colorScheme val Context.mTypography get() = MaterialTheme.typography val Context.mShapes get() = MaterialTheme.shapes
之后在任意Composable函数里,就能直接用:
Text( text = "示例文本", color = mColor.primary, style = mTypography.titleLarge )
方式二:自定义全局对象
如果觉得mColor还不够简洁,可以直接把常用主题值封装到全局对象里:
object MColor { val primary get() = MaterialTheme.colorScheme.primary val onPrimary get() = MaterialTheme.colorScheme.onPrimary val secondary get() = MaterialTheme.colorScheme.secondary // 按需添加你常用的其他颜色 }
使用时更直接:
Button( onClick = {}, colors = ButtonDefaults.buttonColors( containerColor = MColor.primary, contentColor = MColor.onPrimary ) ) { Text("按钮") }
注意事项
不管用哪种方式,这些代码必须在Composable函数内部调用——因为MaterialTheme的取值依赖Compose的CompositionLocal机制,只有在Composable上下文里才能正确获取当前主题的配置。
内容的提问来源于stack exchange,提问作者Reza Faraji
相关产品推荐
相关产品推荐

