Suwak

Komponent Slider umożliwia użytkownikom wybieranie spośród różnych wartości. Za pomocą suwaka możesz umożliwić użytkownikowi:

  • Dostosowywanie ustawień, które używają zakresu wartości, takich jak głośność i jasność.
  • Filtrowanie danych na wykresie, np. podczas ustawiania zakresu cen.
  • dane wprowadzane przez użytkownika, np. ocena w opinii;

Suwak zawiera ścieżkę, miniaturę, 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ę.
  • Oznaczenia: opcjonalne wizualne znaczniki lub wskaźniki, które pojawiają się na ścieżce suwaka.
Suwak ze znacznikami kciuka, ścieżki i znaczników.
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())
    }
}

Ta 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

Podczas wdrażania bardziej złożonego suwaka możesz dodatkowo użyć 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 zagłębień na suwaku, w których zatrzaskuje się kciuk.

Ten fragment kodu implementuje suwak z 3 poziomami od 0.0 do 50.0. Ponieważ suwak przeskakuje po każdym kroku, jest on ciągły.

@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:

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

Suwak zakresu

Możesz też użyć dedykowanego komponentu 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 wybranymi 2 wartościami Etykieta wyświetla górną i dolną granicę zaznaczenia.
Rysunek 4. Implementacja suwaka zakresu.

Dodatkowe materiały