Slider

Последнее обновление: 02.04.2024

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

Функция компонента имеет следующее определение:

@Composable
fun Slider(
    value: Float,
    onValueChange: (Float) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    valueRange: ClosedFloatingPointRange<Float> = 0f..1f,
    steps: @IntRange(from = 0) Int = 0,
    onValueChangeFinished: (() -> Unit)? = null,
    colors: SliderColors = SliderDefaults.colors(),
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
): Unit

Параметры компонента:

  • value: текущее значение слайдера в виде объекта Float

  • onValueChange: функция обработки изменения введенного значения. Представляет функцию типа (Float) -> Unit, в которую в качестве параметра передается новое значение

  • modifier: объект типа Modifier, который задает модификаторы компонента

  • enabled: устанавливает, будет ли слайдер доступен для ввода. Представляет значение типа Boolean. По умолчанию равно true, то есть поле доступно для ввода

  • valueRange: устанавливает диапазон достуных для выбора значений в виде объекта ClosedFloatingPointRange<Float>. По умолчанию равно диапазону 0f..1f.

  • steps: количество делений на диапазоне valueRange. Если это значение больше 0, то значения равномено распределяются по шкале, и мы можем выбрать одно из этих делений. Если это значение равно 0, то мы можем выбрать любое значение на шкале. Значение по умолчанию - 0

  • onValueChangeFinished: устанавливает функцию типа () -> Unit, которая вызывается после завершения установки значения слайдера. Эта функция позволяет указать, что пользователь завершил изменение значения слайдера. Значение по умолчанию - null

  • colors: объект SliderColors, который задает цвета для поля ввода. Значение по умолчанию - SliderDefaults.colors()

  • interactionSource: объект MutableInteractionSource, который задает поток взаимодействий для поля ввода.

Определим простейший слайдер:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.material3.Slider

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            var sliderPosition by remember{mutableStateOf(0f)}
            Column{
                Text(text = "Текущее значение: ${sliderPosition}", fontSize = 22.sp)
                Slider(
                    value = sliderPosition,
                    onValueChange = { sliderPosition = it }
                )
            }
        }
    }
}

В данном случае для хранения значения слайдера определена переменная sliderPosition. По умолчанию она равна 0.

Для слайдера необходимо задать как минимум два параметра: value и onValueChange. Параметр value привязан к значению переменной sliderPosition, а в функции onValueChange получаем новое значение и переустанавливаем значение переменной sliderPosition.

Slider в Jetpack Compose и Kotlin в Android

В примере выше не указан диапазон, поэтому по умолчанию мы можем выбирать значения на диапазоне от 0 до 1. Причем, так как не указано количество делений, это может быть любое значение, напимер, 0.51574075. Теперь явно укажем диапазон и количество делений:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.material3.Slider

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            var sliderPosition by remember{mutableStateOf(0f)}
            Column{
                Text(text = "Текущее значение: ${sliderPosition}", fontSize = 22.sp)
                Slider(
                    value = sliderPosition,
                    valueRange = 0f..10f,
                    steps = 9,
                    onValueChange = { sliderPosition = it }
                )
            }
        }
    }
}

В данном случае количество делений - 9, а диапазон - от 1 до 10. Поэтому на слайдере мы можем выбрать любое число из диапазона [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Диапазон значений в Slider в Jetpack Compose и Kotlin в Android

Цветовая гамма

По умолчанию слайдер использует цвета, устанавливаемые компонентом SliderDefaults.colors:

@Composable
fun colors(
    thumbColor: Color = Color.Unspecified,
    activeTrackColor: Color = Color.Unspecified,
    activeTickColor: Color = Color.Unspecified,
    inactiveTrackColor: Color = Color.Unspecified,
    inactiveTickColor: Color = Color.Unspecified,
    disabledThumbColor: Color = Color.Unspecified,
    disabledActiveTrackColor: Color = Color.Unspecified,
    disabledActiveTickColor: Color = Color.Unspecified,
    disabledInactiveTrackColor: Color = Color.Unspecified,
    disabledInactiveTickColor: Color = Color.Unspecified
): SliderColors

Параметры компонента:

  • thumbColor: цвет ползунка

  • activeTrackColor: цвет шкалы до ползунка

  • activeTickColor: цвет делений шкалы до ползунка

  • inactiveTrackColor: цвет шкалы после ползунка

  • inactiveTickColor: цвет делений шкалы после ползунка

  • disabledThumbColor: цвет ползунка, когда слайдер недоступен для взаимодействия

  • disabledActiveTrackColor: цвет шкалы до ползунка, когда слайдер недоступен для взаимодействия

  • disabledInactiveTrackColor: цвет шкалы после ползунка, когда слайдер недоступен для взаимодействия

  • disabledActiveTickColor: цвет делений шкалы до ползунка, когда слайдер недоступен для взаимодействия

  • disabledInactiveTickColor: цвет делений шкалы после ползунка, когда слайдер недоступен для взаимодействия

Изменим цветовую гамму слайдера:

package com.example.helloapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.material3.Slider
import androidx.compose.material3.SliderDefaults
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.sp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            var sliderPosition by remember{mutableStateOf(0f)}
            Column{
                Text(text = "Текущее значение: ${sliderPosition}", fontSize = 22.sp)
                Slider(
                    value = sliderPosition,
                    valueRange = 0f..10f,
                    steps = 9,
                    onValueChange = { sliderPosition = it },
                    colors = SliderDefaults.colors(
                        thumbColor = Color(0xFFB71C1C),
                        activeTrackColor = Color(0xFFEF9A9A),
                        inactiveTrackColor = Color(0xFFFFEBEE),
                        inactiveTickColor = Color(0xFFEF9A9A),
                        activeTickColor = Color(0xFFB71C1C)
                    )
                )
            }
        }
    }
}
SliderColors в Slider в Jetpack Compose и Kotlin в Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850