在我们开发过程中,可能由自定义主题的需求?但是,如何实现自定义主题呢?下面我们来一起看看。虽然官方推荐我们使用Material设计系统,但这并代表我们只能使用该系统。由于Material完全基于公共API构建而成,因此我们可以仿照同样的方式创建设计系统。而自行创建设计系统的方式由以下几种方式:
- 通过其他主题值扩展 MaterialTheme
- 将一个或多个Material系统(Colors、Typography或Shapes)替换为自定义实现并保留其他实现
- 实现完全自定义的设计系统以替换MaterialTheme
讲完自行创建系统的方式之后,我们接着来看各种方式的具体实现:
一、扩展MaterialTheme设置
扩展MaterialTheme设置的方法由两种:添加扩展属性和定义可“封装”MaterialTheme及其值的扩展主题。
1、添加扩展属性就是利用kotlin的扩展来增加MaterialTheme下的colors属性、Typography属性或者shapes属性。
例如我想给colors增加图标颜色的属性可以这样子做:
val Colors.iconColor: Color
get() = Color.Red
使用扩展的属性与MaterialTheme的API一致:
MaterialTheme {
Icon(Icons.Filled.Home, tint = MaterialTheme.colors.iconColor, contentDescription = "首页")
}
在这里,写一个简单的例子:
/**
* 通过其他主题值扩展 MaterialTheme
*/
@Composable
fun compose_13_extend(){
MaterialTheme {
Column(Modifier.background(color = MaterialTheme.colors.background)) {
Icon(Icons.Filled.Home, tint = MaterialTheme.colors.iconColor, contentDescription = "首页")
var text by remember { mutableStateOf("") }
TextField(value = text, onValueChange = { text = it },
textStyle = MaterialTheme.typography.