Slider

Picks a value or a range along a track. Continuous or in steps.

When to use

Use a slider for values where the exact number matters less than the direction, such as volume or brightness. Add steps for discrete values and a RangeSlider to choose a minimum and maximum.

Show the current value as text next to the slider when precision matters.

Playground

The interactive page has a playground with live property controls for this component and generated code.

Examples

Continuous

var value by rememberSaveable { mutableFloatStateOf(0.3f) }

Column(Modifier.widthIn(max = 360.dp).fillMaxWidth()) {
    Slider(value = value, onValueChange = { value = it })
    Text("Volume ${(value * 100).toInt()}")
}

Range

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

Column(Modifier.widthIn(max = 360.dp).fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(8.dp)) {
    RangeSlider(
        value = range,
        onValueChange = { range = it },
        valueRange = 0f..100f,
    )
    Text("Price ${range.start.toInt()} to ${range.endInclusive.toInt()}")
}

Parameters

NameTypeDefaultDescription
valueFloatCurrent value.
onValueChange(Float) -> UnitCalled continuously while dragging.
valueRangeClosedFloatingPointRange<Float>0f..1fMinimum and maximum.
stepsInt0Number of discrete values between the ends.
onValueChangeFinished(() -> Unit)?nullCalled once when the drag ends.

Guidelines

Do:

Don't:

Accessibility

Related components