Все компоненты Jetpack Compose Glimmer разработаны для работы со стандартными методами ввода, такими как касание или смахивание на сенсорной панели очков с искусственным интеллектом, а также поддерживают низкоуровневые команды ввода, специфичные для аппаратного обеспечения очков с искусственным интеллектом. Компоненты Jetpack Compose Glimmer автоматически обрабатывают необходимые события ввода. Для пользовательских компонентов можно использовать существующие API Compose, такие как Modifier.draggable или Modifier.scrollable для реализации особых интерактивных схем.
В очках искусственного интеллекта с дисплеем ввод с помощью указателя может повлиять на фокусировку:
- Нажатие : прямое взаимодействие для активации элемента. Фокус перемещается на элемент, когда пользователь взаимодействует с ним.
- Свайп : используется для навигации и прокрутки. Необработанные свайпы автоматически преобразуются в перемещение фокуса, обеспечивая плавную навигацию по пользовательскому интерфейсу без прямого ввода указателя.
Используя функцию Jetpack Compose, система может автоматически устанавливать начальный фокус на самый первый фокусируемый элемент при загрузке экрана, которым часто является верхний левый элемент. Эта функция всё ещё находится в разработке и не включена по умолчанию. Чтобы активировать эту функцию, установите флаг isInitialFocusOnFocusableAvailable в true в методе onCreate() вашей активности.
class GlassesActivityExample : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@OptIn(ExperimentalComposeUiApi::class)
ComposeUiFlags.isInitialFocusOnFocusableAvailable = true
super.onCreate(savedInstanceState)
}
}
Поведение и порядок навигации
Изменение фокуса и порядка по мере того, как пользователь перемещается по приложению.
Движение фокуса
В прокручиваемом контейнере фокус перемещается непрерывно при помощи свайпа по сенсорной панели. Для отдельных элементов, таких как ряд кнопок, каждое свайп перемещает фокус на один элемент за раз.
Порядок фокусировки
Как и в Jetpack Compose, в Jetpack Compose Glimmer используется одномерный поиск фокуса. Подробнее о порядке перемещения фокуса см. в разделе Изменение порядка перемещения фокуса .
Чтобы изменить изначально сфокусированный элемент, можно добавить Modifier.focusGroup() верхнего уровня и указать пользовательское свойство onEnter focusProperty :
Modifier.focusProperties {
onEnter = {
initialFocus.requestFocus()
cancelFocusChange()
}
}
.focusGroup()
Прокручиваемые контейнеры
Для оптимального пользовательского опыта прокручиваемые элементы, такие как списки, должны быть единственным крупным компонентом на экране. Избегайте размещения прокручиваемых списков непосредственно над или под другими интерактивными элементами, такими как кнопки, чтобы избежать путаницы в навигации и обеспечить плавное и предсказуемое перемещение фокуса.
Состояния фокуса по умолчанию
Jetpack Compose Glimmer реализует состояния фокуса по умолчанию для всех своих интерактивных компонентов, включая поверхности, карточки и элементы списков, обеспечивая последовательную и четкую визуальную обратную связь во время взаимодействия с пользователем.

По умолчанию : цвет фона кнопки берется из
GlimmerTheme.colors.surface, ее основное содержимое вычисляет цвет содержимого этой поверхности, а значки — изGlimmerTheme.colors.primary.Фокус : ширина границы увеличена для передачи фокуса.
Фокус + Нажато : фон устанавливается на
GlimmerTheme.colors.surfaceс полной непрозрачностью, чтобы обозначить выбранное состояние.