Ползунок

Компонуемый элемент Slider позволяет пользователям выбирать значения из диапазона. Ползунок можно использовать, чтобы пользователь мог:

  • Настраивать параметры, которые имеют диапазон значений, например громкость и яркость.
  • Фильтрация данных на графике, например при задании диапазона цен.
  • Ввод данных пользователем, например оценка в отзыве.

Ползунок содержит дорожку, бегунок, ярлык значения и деления:

  • Ползунок. Горизонтальная полоса, представляющая диапазон значений, которые может принимать ползунок.
  • Ползунок. Перетаскиваемый элемент управления на ползунке, позволяющий пользователю выбрать определенное значение в диапазоне, заданном дорожкой.
  • Деления. Необязательные визуальные маркеры или индикаторы, которые появляются вдоль дорожки ползунка.
Ползунок с бегунком, дорожкой и отметками.
Рисунок 1. Реализация ползунка.

Базовая реализация

Полное описание API приведено в справочнике по Slider. Ниже перечислены основные параметры composable-функции Slider:

  • value – текущее значение ползунка.
  • onValueChange – лямбда-функция, которая вызывается каждый раз, когда значение меняется.
  • enabled – логическое значение, указывающее, может ли пользователь взаимодействовать со слайдером.

Ниже приведен пример простого слайдера. Пользователь может выбрать значение от 0.0 до 1.0. Поскольку пользователь может выбрать любое значение в этом диапазоне, ползунок является непрерывным.

@Preview
@Composable
fun SliderMinimalExample() {
    var sliderPosition by remember { mutableFloatStateOf(0f) }
    Column {
        Slider(
            value = sliderPosition,
            onValueChange = { sliderPosition = it }
        )
        Text(text = sliderPosition.toString())
    }
}

Вот как это будет выглядеть:

Ползунок, значение которого выбрано примерно на три четверти длины.
Рисунок 2. Базовая реализация ползунка.

Расширенная реализация

При создании более сложного слайдера можно также использовать следующие параметры:

  • colors – экземпляр SliderColors, позволяющий управлять цветами ползунка.
  • valueRange – диапазон значений, которые может принимать ползунок.
  • steps – количество делений на ползунке, к которым прилипает бегунок.

В приведенном ниже фрагменте кода реализован ползунок с тремя шагами и диапазоном от 0.0 до 50.0. Поскольку ползунок переходит к каждому шагу, он дискретный.

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

Реализация выглядит следующим образом:

Ползунок с отметками, диапазон значений которого составляет от 0 до 50. Отметки расположены на равном расстоянии друг от друга. Ползунок расположен рядом со второй отметкой, указывая на выбранное значение 16.
Рисунок 3. Ползунок с шагами и заданным диапазоном значений.

Ползунок для выбора диапазона

Также можно использовать специальный компонент RangeSlider. Это позволит пользователю выбрать два значения. Это может быть полезно, например, когда пользователь хочет выбрать минимальную и максимальную цену.

Ниже приведен относительно простой пример непрерывного ползунка.

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

Компонент "Ползунок диапазона" с двумя выбранными значениями. На ярлыке будут указаны верхняя и нижняя границы выбранного диапазона.
Рисунок 4. Реализация ползунка для выбора диапазона.

Дополнительные ресурсы