Android Jetpack Compose - Switch(切换)、Slider(滑块)、RangeSlider(范围滑块)

一、Switch(切换)

1、基本介绍
kotlin 复制代码
fun Switch(
    checked: Boolean,
    onCheckedChange: ((Boolean) -> Unit)?,
    modifier: Modifier = Modifier,
    thumbContent: (@Composable () -> Unit)? = null,
    enabled: Boolean = true,
    colors: SwitchColors = SwitchDefaults.colors(),
    interactionSource: MutableInteractionSource? = null,
) {}
参数 说明
checked 当前开关状态
onCheckedChange 状态变化时的回调
modifier 布局修饰符
thumbContent 自定义滑块内容
enabled 是否启用
colors 自定义颜色,通过 SwitchDefaults.colors() 配置
interactionSource 自定义交互状态反馈
2、演示
kotlin 复制代码
var checked by remember { mutableStateOf(true) }

Box(
    modifier = Modifier.fillMaxSize()
) {
    Switch(
        modifier = Modifier.align(Alignment.Center),
        checked = checked,
        onCheckedChange = {
            checked = it
        }
    )
}
kotlin 复制代码
var checked by remember { mutableStateOf(true) }

Box(
    modifier = Modifier.fillMaxSize()
) {
    Switch(
        modifier = Modifier.align(Alignment.Center),
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        thumbContent = if (checked) {
            {
                Icon(
                    imageVector = Icons.Filled.Check,
                    contentDescription = null,
                    modifier = Modifier.size(SwitchDefaults.IconSize),
                )
            }
        } else {
            null
        }
    )
}
kotlin 复制代码
var checked by remember { mutableStateOf(true) }

Box(
    modifier = Modifier.fillMaxSize()
) {
    Switch(
        modifier = Modifier.align(Alignment.Center),
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        colors = SwitchDefaults.colors(
            checkedThumbColor = MaterialTheme.colorScheme.primary,
            checkedTrackColor = MaterialTheme.colorScheme.primaryContainer,
            uncheckedThumbColor = MaterialTheme.colorScheme.secondary,
            uncheckedTrackColor = MaterialTheme.colorScheme.secondaryContainer,
        )
    )
}

二、Slider(滑块)

1、基本介绍
kotlin 复制代码
fun Slider(
    value: Float,
    onValueChange: (Float) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
    @IntRange(from = 0) steps: Int = 0,
    onValueChangeFinished: (() -> Unit)? = null,
    colors: SliderColors = SliderDefaults.colors(),
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) {}
参数 说明
value 当前滑块的值
onValueChange 值变化时的回调
modifier 布局修饰符
enabled 是否启用
valueRange 值范围
steps steps = 0(默认):滑块在 valueRange 内连续滑动 steps = 3:将范围分成 4 个等距档位,档位数 = steps + 1
onValueChangeFinished 松开手指结束滑动时的回调
colors 自定义颜色,通过 SliderDefaults.colors() 配置
interactionSource 自定义交互状态反馈
2、演示
kotlin 复制代码
var sliderPosition by remember { mutableFloatStateOf(0f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    Slider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it }
    )
    Text(text = sliderPosition.toString())
}
kotlin 复制代码
var sliderPosition by remember { mutableFloatStateOf(0f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    Slider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it },
        colors = SliderDefaults.colors(
            thumbColor = MaterialTheme.colorScheme.secondary,
            activeTrackColor = MaterialTheme.colorScheme.secondary,
            inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer,
        ),
        steps = 3,
    )
    Text(text = sliderPosition.toString())
}
kotlin 复制代码
var sliderPosition by remember { mutableFloatStateOf(0f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    Slider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it },
        colors = SliderDefaults.colors(
            thumbColor = MaterialTheme.colorScheme.secondary,
            activeTrackColor = MaterialTheme.colorScheme.secondary,
            inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer,
        ),
        steps = 3,
        valueRange = 0f..50f
    )
    Text(text = sliderPosition.toString())
}

三、RangeSlider(范围滑块)

1、基本介绍
kotlin 复制代码
fun RangeSlider(
    value: ClosedFloatingPointRange<Float>,
    onValueChange: (ClosedFloatingPointRange<Float>) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
    @IntRange(from = 0) steps: Int = 0,
    onValueChangeFinished: (() -> Unit)? = null,
    colors: SliderColors = SliderDefaults.colors()
) {}
参数 说明
value 当前滑块的值
onValueChange 值变化时的回调
modifier 布局修饰符
enabled 是否启用
valueRange 值范围
steps steps = 0(默认):滑块在 valueRange 内连续滑动 steps = 3:将范围分成 4 个等距档位,档位数 = steps + 1
onValueChangeFinished 松开手指结束滑动时的回调
colors 自定义颜色,通过 SliderDefaults.colors() 配置
2、演示
kotlin 复制代码
var sliderPosition by remember { mutableStateOf(0f..100f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    RangeSlider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it },
        onValueChangeFinished = {
            Log.i(TAG, "松开手指结束滑动了")
        },
        valueRange = 0f..100f
    )
    Text(sliderPosition.start.toString() + " - " + sliderPosition.endInclusive.toString())
}
kotlin 复制代码
var sliderPosition by remember { mutableStateOf(0f..100f) }

Column(
    modifier = Modifier
        .fillMaxSize()
        .padding(16.dp),
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.Center
) {
    RangeSlider(
        value = sliderPosition,
        onValueChange = { sliderPosition = it },
        valueRange = 0f..100f,
        steps = 3,
    )
    Text(sliderPosition.start.toString() + " - " + sliderPosition.endInclusive.toString())
}
相关推荐
青云计划8 小时前
知光项目知文发布模块
java·后端·spring·mybatis
赶路人儿9 小时前
Jsoniter(java版本)使用介绍
java·开发语言
冬奇Lab9 小时前
Android系统启动流程深度解析:从Bootloader到Zygote的完整旅程
android·源码阅读
探路者继续奋斗9 小时前
IDD意图驱动开发之意图规格说明书
java·规格说明书·开发规范·意图驱动开发·idd
消失的旧时光-194310 小时前
第十九课:为什么要引入消息队列?——异步系统设计思想
java·开发语言
A懿轩A10 小时前
【Java 基础编程】Java 面向对象入门:类与对象、构造器、this 关键字,小白也能写 OOP
java·开发语言
泓博11 小时前
Android中仿照View selector自定义Compose Button
android·vue.js·elementui
乐观勇敢坚强的老彭11 小时前
c++寒假营day03
java·开发语言·c++
biubiubiu070611 小时前
谷歌浏览器无法访问localhost:8080
java
大黄说说11 小时前
新手选语言不再纠结:Java、Python、Go、JavaScript 四大热门语言全景对比与学习路线建议
java·python·golang