Funkcja kompozycyjna Slider
umożliwia użytkownikom wybranie zakresu
. Za pomocą suwaka możesz umożliwić użytkownikowi:
- Dostosuj ustawienia, które używają zakresu wartości, np. głośności i jasności.
- Filtrowanie danych na wykresie, np. podczas ustawiania zakresu cen.
- Dane wejściowe użytkownika, np. ocena w opinii.
Suwak zawiera ścieżkę dźwiękową, ikonę kciuka, etykietę wartości i znaczniki:
- Ścieżka: ścieżka to poziomy pasek, który reprezentuje zakres wartości, jakie może przyjąć suwak.
- Przycisk: jest to element suwaka, który można przeciągać, aby wybrać konkretną wartość w zakresie zdefiniowanym przez ścieżkę.
- Znaczniki: to opcjonalne znaczniki wizualne lub wskaźniki, które są wyświetlane na ścieżce suwaka.

Implementacja podstawowa
Pełną definicję interfejsu API znajdziesz w dokumentacji Slider
. Oto niektóre z najważniejszych parametrów komponentu Slider
:
value
– bieżąca wartość suwaka.onValueChange
: funkcja lambda wywoływana za każdym razem, gdy zmienia się wartość.enabled
: wartość logiczna wskazująca, czy użytkownik może wchodzić w interakcję z suwak.
Przykład poniżej to prosty suwak. Pozwala to użytkownikowi wybrać wartość z zakresu 0.0
–1.0
. Użytkownik może wybrać dowolną wartość w tym zakresie, więc suwak jest ciągły.
@Preview @Composable fun SliderMinimalExample() { var sliderPosition by remember { mutableFloatStateOf(0f) } Column { Slider( value = sliderPosition, onValueChange = { sliderPosition = it } ) Text(text = sliderPosition.toString()) } }
Implementacja wygląda tak:

Implementacja zaawansowana
Implementując bardziej złożony suwak, możesz dodatkowo użyć funkcji tych parametrów.
colors
: instancja klasySliderColors
, która umożliwia kontrolowanie kolorów suwaka.valueRange
: zakres wartości, które może przyjąć suwak.steps
: liczba otworów na suwaku, do których kciuk jest przyciągany.
Ten fragment kodu implementuje suwak z 3 poziomami od 0.0
do 50.0
. Kciuk jest przyciągany do każdego kroku, więc suwak jest
dyskretny.
@Preview @Composable fun SliderAdvancedExample() { var sliderPosition by remember { mutableFloatStateOf(0f) } Column { 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()) } }
Implementacja wygląda tak:

Suwak zakresu
Możesz też użyć dedykowanej funkcji kompozycyjnej RangeSlider
. Dzięki temu użytkownik może wybrać 2 wartości. Może to być przydatne, gdy użytkownik chce wybrać cenę minimalną i maksymalną.
Poniżej znajdziesz stosunkowo prosty przykład suwaka zakresu ciągłego.
@Preview @Composable fun RangeSliderExample() { var sliderPosition by remember { mutableStateOf(0f..100f) } Column { RangeSlider( value = sliderPosition, steps = 5, onValueChange = { range -> sliderPosition = range }, valueRange = 0f..100f, onValueChangeFinished = { // launch some business logic update with the state you hold // viewModel.updateSelectedSliderValue(sliderPosition) }, ) Text(text = sliderPosition.toString()) } }
