Все компоненты Jetpack Compose Glimmer разработаны для работы со стандартными методами ввода, такими как касание или свайп на сенсорной панели очков, а также для приема команд ввода более низкого уровня, специфичных для оборудования очков-дисплеев. Компоненты Jetpack Compose Glimmer автоматически обрабатывают необходимые события ввода.
Для стандартных действий, таких как прокрутка и перетаскивание, используйте компоненты Jetpack Compose Glimmer для обеспечения единообразного пользовательского опыта. Однако для пользовательских компонентов или нестандартного поведения взаимодействия вы можете использовать существующие API Compose, такие как Modifier.draggable или Modifier.scrollable .
Ввод указателя и фокусировка
На очках с дисплеем ввод указателя может влиять на фокусировку:
- Касание : Прямое взаимодействие для активации элемента. Фокус перемещается на элемент, когда пользователь взаимодействует с ним.
- Пролистывание : Используется для навигации и прокрутки. Необработанные жесты пролистывания автоматически преобразуются в перемещение фокуса, обеспечивая плавную навигацию по пользовательскому интерфейсу без прямого ввода указателя.
Благодаря функции Jetpack Compose система может автоматически устанавливать начальный фокус на самый первый элемент, доступный для фокусировки, при загрузке экрана, которым обычно является элемент в верхнем левом углу экрана.
Эта функция всё ещё находится в разработке и не включена по умолчанию. Чтобы активировать её, установите флаг isInitialFocusOnFocusableAvailable в true в методе onCreate() вашего Activity.
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.ComposeUiFlags
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()
// Prevent focus from exiting the group
cancelFocusChange()
}
}
.focusGroup()
прокручиваемые контейнеры
Для оптимального взаимодействия с пользователем единственным основным элементом на экране должны быть прокручиваемые контейнеры, такие как списки. Избегайте размещения прокручиваемого списка непосредственно над или под другими интерактивными элементами, такими как кнопки, чтобы избежать путаницы в навигации и обеспечить плавное и предсказуемое перемещение фокуса.
Состояния фокуса по умолчанию
Jetpack Compose Glimmer реализует состояния фокуса по умолчанию для всех интерактивных компонентов, включая поверхности, карточки и элементы списков, обеспечивая согласованную и понятную визуальную обратную связь во время взаимодействия с пользователем.

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