跳转到内容

RangeSliderPreference

RangeSliderPreference 是 Miuix 中的范围滑块偏好设置组件,将标题/摘要与范围滑块控件结合在一起。范围滑块放置在 BasicComponent 的底部操作区域中,适用于设置界面中需要选择数值范围的场景,如价格筛选、频段选择或双阈值控制。

引入

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

基本用法

kotlin
var rangeValue by remember { mutableStateOf(0.2f..0.8f) }

RangeSliderPreference(
    value = rangeValue,
    onValueChange = { rangeValue = it },
    title = "范围选择"
)

带摘要

kotlin
var priceRange by remember { mutableStateOf(100f..500f) }

RangeSliderPreference(
    value = priceRange,
    onValueChange = { priceRange = it },
    title = "价格范围",
    summary = "¥${priceRange.start.roundToInt()} - ¥${priceRange.endInclusive.roundToInt()}",
    valueRange = 0f..1000f
)

组件状态

禁用状态

kotlin
var rangeValue by remember { mutableStateOf(0.3f..0.7f) }

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

属性

RangeSliderPreference 属性

属性名类型说明默认值是否必须
valueClosedFloatingPointRange<Float>范围滑块的当前值。如果任一值超出 valueRange,将被强制限制在范围内-
onValueChange(ClosedFloatingPointRange<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
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 priceRange by remember { mutableStateOf(100f..500f) }

RangeSliderPreference(
    value = priceRange,
    onValueChange = { priceRange = it },
    title = "价格筛选",
    summary = "¥${priceRange.start.roundToInt()} - ¥${priceRange.endInclusive.roundToInt()}",
    valueRange = 0f..1000f,
    steps = 99
)

带左侧图标

kotlin
var frequencyRange by remember { mutableStateOf(20f..20000f) }

RangeSliderPreference(
    value = frequencyRange,
    onValueChange = { frequencyRange = it },
    title = "频率范围",
    summary = "${frequencyRange.start.roundToInt()}Hz - ${frequencyRange.endInclusive.roundToInt()}Hz",
    startAction = {
        Icon(
            imageVector = MiuixIcons.Basic.Audio,
            contentDescription = "频率图标",
            tint = MiuixTheme.colorScheme.onBackground,
            modifier = Modifier.padding(end = 16.dp)
        )
    },
    valueRange = 20f..20000f,
    showKeyPoints = true,
    keyPoints = listOf(20f, 100f, 1000f, 5000f, 10000f, 20000f)
)

自定义关键点

kotlin
var range by remember { mutableStateOf(20f..80f) }

RangeSliderPreference(
    value = range,
    onValueChange = { range = it },
    title = "自定义范围",
    summary = "${range.start.roundToInt()}% - ${range.endInclusive.roundToInt()}%",
    valueRange = 0f..100f,
    showKeyPoints = true,
    keyPoints = listOf(0f, 20f, 40f, 60f, 80f, 100f),
    magnetThreshold = 0.03f
)

变更日志

基于 Apache-2.0 许可发布