Фокус в Jetpack Compose Glimmer

Поддерживаемые XR-устройства
Это руководство поможет вам создавать продукты для таких XR-устройств.
Видеоочки

Все компоненты Jetpack Compose Glimmer разработаны для работы со стандартными методами ввода, такими как нажатие или пролистывание на сенсорной панели очков, а также восприимчивы к командам ввода более низкого уровня, которые специфичны для аппаратного обеспечения видеоочков. Компоненты Jetpack Compose Glimmer автоматически обрабатывают необходимые события ввода.

Для стандартных действий, таких как прокрутка и перетаскивание, используйте компоненты Jetpack Compose Glimmer, чтобы обеспечить единообразие. Однако для пользовательских компонентов или индивидуального поведения взаимодействия вы можете использовать существующие API Compose, такие как Modifier.draggable или Modifier.scrollable.

Ввод с помощью указателя и фокус

На видеоочках ввод указателя может влиять на фокус:

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

При навигации по приложению фокус перемещается и порядок меняется.

Перемещение фокуса

В прокручиваемом контейнере фокус перемещается непрерывно при проведении пальцем по сенсорной панели. Для дискретных элементов, таких как ряд кнопок, каждое движение перемещает фокус на один элемент за раз.

Порядок фокуса

Как и в Jetpack Compose, в Jetpack Compose Glimmer используется одномерный поиск фокуса. Подробнее о том, как изменить порядок обхода…

Чтобы изменить элемент, на котором изначально фокусируется внимание, можно добавить Modifier.focusGroup() верхнего уровня и указать пользовательский onEnter focusProperty:

Modifier.focusProperties {
    onEnter = {
        initialFocus.requestFocus()
        // Prevent focus from exiting the group
        cancelFocusChange()
    }
}
.focusGroup()

Контейнеры с прокруткой

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

Состояния фокуса по умолчанию

В Jetpack Compose Glimmer реализованы состояния фокуса по умолчанию для всех интерактивных компонентов, включая поверхности, карточки и элементы списков. Это обеспечивает согласованную и понятную визуальную обратную связь при взаимодействии с пользователем.

Рисунок 1. Три состояния фокуса в Jetpack Compose Glimmer, которые различаются с помощью визуальной обратной связи на основе контура.
  • По умолчанию. Цвет фона кнопки определяется параметром GlimmerTheme.colors.surface, а цвет основного контента рассчитывается на основе цвета фона.

  • В фокусе. Толщина границы увеличивается, чтобы показать, что элемент находится в фокусе.

  • В фокусе + нажато. Фон становится более непрозрачным (GlimmerTheme.colors.surface), чтобы показать, что элемент выбран.