Compose Unstyled 2.0 is out! Check the official announcement blog ->

Sliders for continuous values, stepped ranges, and vertical controls.

Use sliders when people need to adjust a value across a bounded range.

View on GitHub
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.composables.ui.components.Slider

@Composable
fun SliderExample() {
    var value by remember { mutableFloatStateOf(0.45f) }
    Column(
        modifier = Modifier,
        verticalArrangement = Arrangement.spacedBy(12.dp),
    ) {
        Slider(value = value, onValueChange = { value = it }, modifier = Modifier.fillMaxWidth())
    }
}

Installation

implementation("com.composables:ui:0.1.0")

Examples

Vertical

View on GitHub
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.composables.ui.components.Slider

@Composable
fun VerticalSliderExample() {
    var value by remember { mutableFloatStateOf(0.45f) }
    Slider(
        value = value,
        onValueChange = { value = it },
        orientation = Orientation.Vertical,
        modifier = Modifier.height(180.dp),
    )
}

Disabled

View on GitHub
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.composables.ui.components.Slider

@Composable
fun DisabledSliderExample() {
    Slider(
        value = 0.45f,
        onValueChange = {},
        enabled = false,
        modifier = Modifier.fillMaxWidth(),
    )
}

Stepped

View on GitHub
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import com.composables.ui.components.Slider

@Composable
fun SteppedSliderExample() {
    var value by remember { mutableFloatStateOf(50f) }
    Slider(
        value = value,
        onValueChange = { value = it },
        valueRange = 0f..100f,
        steps = 4,
        modifier = Modifier.fillMaxWidth(),
    )
}

API Reference

Slider

A slider for selecting a value from a bounded range.

@Composable
fun Slider(
    value: Float,
    onValueChange: (Float) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
    steps: Int = 0,
    orientation: Orientation = Orientation.Horizontal,
    onValueChangeFinished: (() -> Unit)? = null,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
)
Parameter Type Description
value Float Current value shown by the slider.
onValueChange (Float) -> Unit Called when the slider value changes.
modifier Modifier Modifier applied to the slider.
enabled Boolean Whether the slider can be interacted with.
valueRange ClosedFloatingPointRange<Float> Minimum and maximum values allowed by the slider.
steps Int Number of discrete steps between the range endpoints.
orientation Orientation Whether the slider is laid out horizontally or vertically.
onValueChangeFinished (() -> Unit)? Called when a drag or input interaction finishes.
interactionSource MutableInteractionSource Interaction source used for focus, drag, and press state.