Переключение

Компонент Switch позволяет пользователям переключаться между двумя состояниями: отмеченным и неотмеченным. В приложении можно использовать переключатель, чтобы пользователь мог:

  • Включите или отключите параметр.
  • Включить или отключить функцию.
  • Выберите нужный вариант.

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

Примеры компонента "Переключатель" в светлой и тёмной темах.
Рисунок 1. Компонент переключателя.

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

Полное описание API приведено в справочнике по Switch. Ниже перечислены некоторые ключевые параметры, которые могут вам понадобиться.

  • checked – исходное состояние переключателя.
  • onCheckedChange: функция обратного вызова, которая вызывается при изменении состояния переключателя.
  • enabled – включен или отключен переключатель.
  • colors – цвета, используемые для переключателя.

Ниже приведен пример минимальной реализации функции Switch.

@Composable
fun SwitchMinimalExample() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        }
    )
}

Если флажок снят, реализация выглядит следующим образом:

Простой переключатель, который не выбран.
Рисунок 2. Неактивный переключатель.

Вот как выглядит флажок, когда он установлен:

Простой переключатель, который установлен.
Рисунок 3. Установленный переключатель.

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

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

  • thumbContent – позволяет настроить внешний вид ползунка, когда он включен.
  • colors – позволяет настроить цвет дорожки и ползунка.

Свой значок

Вы можете передать любую composable-функцию для параметра thumbContent, чтобы создать собственный значок. Ниже приведен пример переключателя с пользовательским значком для ползунка:

@Composable
fun SwitchWithIconExample() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        thumbContent = if (checked) {
            {
                Icon(
                    imageVector = Icons.Filled.Check,
                    contentDescription = null,
                    modifier = Modifier.size(SwitchDefaults.IconSize),
                )
            }
        } else {
            null
        }
    )
}

В этом случае внешний вид элемента в неотмеченном состоянии будет таким же, как в примере из предыдущего раздела. Однако если флажок установлен, то реализация будет выглядеть следующим образом:

Переключатель, который использует параметр thumbContent для показа специального значка, когда он включен.
Рисунок 4. Переключатель с пользовательским значком.

Собственные цвета

В следующем примере показано, как с помощью параметра colors изменить цвет ползунка и дорожки переключателя с учетом того, включен он или нет.

@Composable
fun SwitchWithCustomColors() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        colors = SwitchDefaults.colors(
            checkedThumbColor = MaterialTheme.colorScheme.primary,
            checkedTrackColor = MaterialTheme.colorScheme.primaryContainer,
            uncheckedThumbColor = MaterialTheme.colorScheme.secondary,
            uncheckedTrackColor = MaterialTheme.colorScheme.secondaryContainer,
        )
    )
}

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

Переключатель, в котором с помощью параметра colors заданы пользовательские цвета для ползунка и дорожки.
Рисунок 5. Переключатель с пользовательскими цветами.

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