Suwak

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.
.
Suwak z przyciskiem, ścieżką i znacznikami.
Rysunek 1. Implementacja 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.01.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:

Element suwaka z wartością wybraną w około 3/4 długości ścieżki.
Rysunek 2. Podstawowa implementacja suwaka.

Implementacja zaawansowana

Implementując bardziej złożony suwak, możesz dodatkowo użyć funkcji tych parametrów.

  • colors: instancja klasy SliderColors, 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:

Tutaj wpisz tekst alternatywny
Rysunek 3. Suwak z krokami i zadanym zakresem wartości.

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())
    }
}

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

Dodatkowe materiały