Suwak

Komponent Slider umożliwia użytkownikom wybieranie wartości z określonego zakresu. Suwak może służyć użytkownikowi do:

  • Dostosuj ustawienia, które korzystają z zakresu wartości, takie jak głośność i jasność.
  • filtrować dane na wykresie, np. podczas ustawiania zakresu cen;
  • dane wprowadzane przez użytkownika, np. ocena w opinii;

Suwak zawiera ścieżkę, suwak, etykietę wartości i znaczniki:

  • Ścieżka: ścieżka to poziomy pasek, który reprezentuje zakres wartości, jakie może przyjmować suwak.
  • Suwak: suwak to element sterujący, który można przeciągać wzdłuż ścieżki. Umożliwia on użytkownikowi wybranie konkretnej wartości z zakresu określonego przez ścieżkę.
  • Znaczniki: opcjonalne znaczniki wizualne lub wskaźniki, które pojawiają się wzdłuż ścieżki suwaka.
Suwak z uchwytem, ścieżką i podziałką.
Rysunek 1. Implementacja suwaka.

Implementacja podstawowa

Pełną definicję interfejsu API znajdziesz w 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 wartość ulegnie zmianie.
  • enabled: wartość logiczna wskazująca, czy użytkownik może wchodzić w interakcję z suwakiem.

Poniższy przykład to prosty suwak. Umożliwia to użytkownikowi wybranie wartości z zakresu od 0.0 do 1.0. Użytkownik może wybrać dowolną wartość z tego zakresu, 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())
    }
}

Ta implementacja wygląda tak:

Komponent suwaka z wartością wybraną w około trzech czwartych długości ścieżki.
Rysunek 2. Podstawowa implementacja suwaka.

Implementacja zaawansowana

W przypadku bardziej złożonego suwaka możesz dodatkowo użyć tych parametrów:

  • colors: instancja SliderColors, która umożliwia kontrolowanie kolorów suwaka.
  • valueRange: zakres wartości, jakie może przyjmować suwak.
  • steps: liczba wycięć na suwaku, do których przesuwa się kciuk.

Poniższy fragment kodu implementuje suwak z 3 krokami w zakresie od 0.0 do 50.0. Suwak jest dyskretny, ponieważ kciuk przeskakuje do każdego kroku.

@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 z podziałką ze znacznikami w zakresie od 0 do 50, z 5 znacznikami w równych odstępach. Suwak znajduje się w pobliżu drugiego znacznika, co oznacza wybraną wartość 16.
Rysunek 3. Suwak z krokami i określonym zakresem wartości.

Suwak zakresu

Możesz też użyć dedykowanego komponentu RangeSlider. Umożliwia to użytkownikowi wybranie 2 wartości. Może to być przydatne w sytuacjach, gdy użytkownik chce wybrać cenę minimalną i maksymalną.

Poniższy przykład to stosunkowo prosty suwak 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())
    }
}

Komponent suwaka zakresu z wybranymi 2 wartościami. Etykieta wyświetla górną i dolną granicę wyboru.
Rysunek 4. Implementacja suwaka zakresu.

Dodatkowe materiały