跳转到内容

SliderPreference

SliderPreference 是 Miuix 中的滑块偏好设置组件,将标题/摘要与滑块控件结合在一起。滑块放置在 BasicComponent 的底部操作区域中,适用于设置界面中需要调整数值的场景,如音量、亮度或字体大小控制。

引入

kotlin
import top.yukonga.miuix.kmp.preference.SliderPreference

基本用法

kotlin
var sliderValue by remember { mutableFloatStateOf(0.5f) }

SliderPreference(
    value = sliderValue,
    onValueChange = { sliderValue = it },
    title = "音量"
)

带摘要

kotlin
var brightness by remember { mutableFloatStateOf(0.8f) }

SliderPreference(
    value = brightness,
    onValueChange = { brightness = it },
    title = "亮度",
    summary = "调整屏幕亮度级别"
)

组件状态

禁用状态

kotlin
var value by remember { mutableFloatStateOf(0.5f) }

SliderPreference(
    value = value,
    onValueChange = { value = it },
    title = "禁用的滑块",
    summary = "此滑块当前不可用",
    enabled = false
)

属性

SliderPreference 属性

属性名类型说明默认值是否必须
valueFloat当前滑块的值。如果超出 valueRange,值将被强制限制在该范围内-
onValueChange(Float) -> Unit值变化时的回调函数-
titleString?偏好设置的标题null
modifierModifier应用于组件的修饰符Modifier
titleColorBasicComponentColors标题文本的颜色配置BasicComponentDefaults.titleColor()
summaryString?摘要说明null
summaryColorBasicComponentColors摘要文本的颜色配置BasicComponentDefaults.summaryColor()
startAction@Composable (() -> Unit)?左侧自定义内容null
valueTextString?当前滑块值文本,以摘要样式显示在末尾区域。在 Row 布局中居中垂直对齐并使用权重null
endActions@Composable (RowScope.() -> Unit)?右侧自定义内容,紧跟 valueText 在同一 Row 中渲染null
bottomAction@Composable (() -> Unit)?底部区域顶部的自定义内容,位于滑块上方null
onClick(() -> Unit)?点击时触发的回调。当非 null 时,末尾区域显示箭头图标null
holdDownStateBoolean组件是否处于按下状态false
enabledBoolean是否启用偏好设置true
valueRangeClosedFloatingPointRange<Float>滑块可以采用的值范围。传递的值将被强制限制在此范围内0f..1f
stepsInt离散值的数量。如果为 0,滑块将连续运行。必须非负0
onValueChangeFinished(() -> Unit)?值变化结束时调用null
reverseDirectionBoolean控制滑块的方向。默认 false,方向跟随 LayoutDirection (LTR 时从左到右,RTL 时从右到左)。为 true 时反转方向。false
sliderHeightDp滑块的高度SliderDefaults.MinHeight
sliderColorsSliderColors滑块的颜色配置SliderDefaults.sliderColors()
hapticEffectSliderDefaults.SliderHapticEffect滑块的触感反馈类型SliderDefaults.DefaultHapticEffect
showKeyPointsBoolean是否显示关键点指示器。仅当 keyPoints 不为 null 时有效false
keyPointsList<Float>?要在滑块上显示的自定义关键点值。如果为 null,则使用 steps 参数的步长位置。值应在 valueRange 范围内null
magnetThresholdFloat磁吸对齐阈值,以分数表示 (0.0 到 1.0)。当滑块值与关键点的距离在此阈值内时,将对齐到该点。仅在设置 keyPoints 时生效0.02f
insideMarginPaddingValues组件内部内容的边距BasicComponentDefaults.InsideMargin

进阶用法

自定义数值范围与步长

kotlin
var temperature by remember { mutableFloatStateOf(25f) }

SliderPreference(
    value = temperature,
    onValueChange = { temperature = it },
    title = "温度",
    summary = "当前: ${temperature.roundToInt()}°C",
    valueRange = 16f..32f,
    steps = 15,
    hapticEffect = SliderDefaults.SliderHapticEffect.Step
)

带左侧图标

kotlin
var volume by remember { mutableFloatStateOf(0.7f) }

SliderPreference(
    value = volume,
    onValueChange = { volume = it },
    title = "音量",
    summary = "${(volume * 100).roundToInt()}%",
    startAction = {
        Icon(
            imageVector = MiuixIcons.Basic.Audio,
            contentDescription = "音量图标",
            tint = MiuixTheme.colorScheme.onBackground,
            modifier = Modifier.padding(end = 16.dp)
        )
    },
    valueRange = 0f..1f
)

自定义关键点

kotlin
var fontSize by remember { mutableFloatStateOf(14f) }

SliderPreference(
    value = fontSize,
    onValueChange = { fontSize = it },
    title = "字体大小",
    summary = "当前: ${fontSize.roundToInt()}sp",
    valueRange = 10f..24f,
    showKeyPoints = true,
    keyPoints = listOf(10f, 12f, 14f, 16f, 18f, 20f, 24f),
    magnetThreshold = 0.05f,
    hapticEffect = SliderDefaults.SliderHapticEffect.Step
)

变更日志

基于 Apache-2.0 许可发布