跳转到内容

Switch

Switch 是 Miuix 中的基础切换组件,用于在两种状态之间进行切换。它提供了具有动画效果的交互式开关控件,适用于设置项的启用与禁用场景。

引入

kotlin
import top.yukonga.miuix.kmp.basic.Switch

基本用法

Switch 组件可以用于在两种状态间切换:

kotlin
var checked by remember { mutableStateOf(false) }

Switch(
    checked = checked,
    onCheckedChange = { checked = it }
)

组件状态

禁用状态

kotlin
var checked by remember { mutableStateOf(false) }

Switch(
    checked = checked,
    onCheckedChange = { checked = it },
    enabled = false
)

属性

Switch 属性

属性名类型说明默认值是否必须
checkedBoolean开关是否处于选中状态-
onCheckedChange((Boolean) -> Unit)?开关状态变化时的回调函数-
modifierModifier应用于开关的修饰符Modifier
colorsSwitchColors开关的颜色配置SwitchDefaults.switchColors()
enabledBoolean开关是否可交互true

SwitchDefaults 对象

SwitchDefaults 对象提供了 Switch 组件的默认颜色配置。

方法

方法名类型说明
switchColors()SwitchColors创建开关的默认颜色配置

SwitchColors 类

属性名类型说明默认值是否必须
checkedThumbColorColor选中状态时滑块的颜色-
uncheckedThumbColorColor未选中状态时滑块的颜色-
disabledCheckedThumbColorColor禁用且选中状态时滑块的颜色-
disabledUncheckedThumbColorColor禁用且未选中状态时滑块的颜色-
checkedTrackColorColor选中状态时轨道的颜色-
uncheckedTrackColorColor未选中状态时轨道的颜色-
disabledCheckedTrackColorColor禁用且选中状态时轨道的颜色-
disabledUncheckedTrackColorColor禁用且未选中状态时轨道的颜色-

进阶用法

自定义颜色

kotlin
var checked by remember { mutableStateOf(false) }

Switch(
    checked = checked,
    onCheckedChange = { checked = it },
    colors = SwitchDefaults.switchColors(
        checkedTrackColor = Color.Red,
        checkedThumbColor = Color.White
    )
)

结合文本使用

kotlin
var checked by remember { mutableStateOf(false) }

Row(
    verticalAlignment = Alignment.CenterVertically,
    modifier = Modifier.padding(16.dp)
) {
    Switch(
        checked = checked,
        onCheckedChange = { checked = it }
    )
    Spacer(modifier = Modifier.width(8.dp))
    Text(text = if (checked) "已开启" else "已关闭")
}

在列表中使用

kotlin
val options = listOf("飞行模式", "蓝牙", "位置服务")
val checkedStates = remember { mutableStateListOf(false, true, false) }

LazyColumn {
    items(options.size) { index ->
        Row(
            modifier = Modifier.fillMaxWidth().padding(16.dp),
            horizontalArrangement = Arrangement.SpaceBetween,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Text(text = options[index])
            Switch(
                checked = checkedStates[index],
                onCheckedChange = { checkedStates[index] = it }
            )
        }
    }
}

整行列表可点击

kotlin
data class Option(val text: String, var isSelected: Boolean)
val options = remember {
    mutableStateListOf(
        Option("飞行模式", false),
        Option("蓝牙", true),
        Option("位置服务", false)
    )
}

LazyColumn {
    items(options.size) { index ->
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .clickable {
                    options[index] = options[index].copy(
                        isSelected = !options[index].isSelected
                    )
                }
                .padding(16.dp),
            horizontalArrangement = Arrangement.SpaceBetween,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Text(text = options[index].text)
            Switch(
                checked = options[index].isSelected,
                onCheckedChange = { 
                    options[index] = options[index].copy(
                        isSelected = !options[index].isSelected
                    )
                }
            )
        }
    }
}

基于 Apache-2.0 许可发布