Пользователи могут перемещать фокус клавиатуры между элементами пользовательского интерфейса с помощью клавиши Tab или клавиш направления (стрелки / D-pad):
- Tab / Shift+Tab : Перемещает фокус вперед или назад в порядке отображения объектов в одном измерении.
- Клавиши управления: перемещение фокуса в двух измерениях ( Вверх , Вниз , Влево и Вправо ).
Одномерное перемещение фокуса
При одномерном перемещении фокуса клавиша Tab перемещает фокус по пользовательскому интерфейсу в соответствии с порядком его отображения на экране.
Например, когда четыре кнопки расположены в ряд:
Column { Row { Button(onClick = { /* ... */ }) { Text("1st") } Button(onClick = { /* ... */ }) { Text("2nd") } } Row { Button(onClick = { /* ... */ }) { Text("3rd") } Button(onClick = { /* ... */ }) { Text("4th") } } }
Нажатие клавиши Tab последовательно перемещает фокус между кнопками в следующем порядке:
- 1-я кнопка (верхний запуск)
- 2-я кнопка (верхний край)
- 3-я кнопка (нижняя кнопка запуска)
- 4-я кнопка (нижний край)
Нажатие клавиши Tab на последнем элементе возвращает фокус на первый целевой объект. Нажатие Shift+Tab перемещает фокус в обратном порядке.
Двумерное перемещение фокуса
Нажатие клавиш со стрелками на клавиатуре или использование D-pad запускает двухмерное перемещение фокуса.
При двумерном перемещении система анализирует геометрические координаты и пространственные границы элементов пользовательского интерфейса, чтобы определить ближайшую цель в заданном направлении.
Двумерное перемещение фокуса не переносится на следующий экран . Если пользователь нажимает клавишу «Вниз» , находясь в фокусе на самом нижнем элементе, фокус остается на этом элементе, а не перемещается в верхнюю часть экрана.
Сброс перемещения фокуса щелчками указателя мыши
При переключении между физической клавиатурой и мышью или тачпадом на настольных компьютерах или устройствах с большим экраном:
- Четкая фокусировка при касании или щелчке : щелчок или касание неинтерактивного пространства мышью или сенсорной панелью освобождает фокус от активного элемента.
- Перезапуск обхода : После сброса фокуса следующее нажатие клавиши Tab перезапускает одномерный обход с первого целевого объекта в порядке его визуального появления, а не возобновляет обход с ранее активного элемента. Это аналогично двумерному обходу фокуса. Клавиши направления перемещают фокус клавиатуры к ближайшему целевому объекту в нужном направлении.
Подробную информацию о программной очистке фокуса см. в разделе «Перемещение и очистка фокуса» .
Настройка порядка перемещения фокуса
Вы можете настроить поведение при перемещении по карте с помощью модификатора focusProperties .
Настройка порядка одномерного обхода
Чтобы отключить одномерный обход, укажите свойство next или previous с помощью FocusRequester :
- Создайте объект
FocusRequesterсremember { FocusRequester() }. - Прикрепите
FocusRequesterк целевому компонуемому объекту, используя модификаторfocusRequester. - Примените модификатор
focusPropertiesк исходному составному элементу и назначьтеFocusRequesterнаnext(для Tab ) илиprevious(для Shift+Tab ).
val (first, second, third) = remember { FocusRequester.createRefs() } Column { Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(first) .focusProperties { next = third } ) { Text("First (Tab jumps to Third)") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(second) ) { Text("Second") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(third) ) { Text("Third") } }
Настройка порядка обхода в двух измерениях.
Аналогичным образом, вы можете переопределить двухмерное перемещение фокуса, назначив экземплярам FocusRequester значения up , down , start , end , left или right в focusProperties :
val (topButton, bottomButton) = remember { FocusRequester.createRefs() } Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(topButton) .focusProperties { down = bottomButton right = bottomButton } ) { Text("Top button") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(bottomButton) ) { Text("Bottom button") }
Чтобы заблокировать навигацию по фокусу в определенном направлении (например, на границах макета), присвойте свойству FocusRequester.Cancel (например, down = FocusRequester.Cancel ). Чтобы явно сохранить алгоритм обхода по умолчанию для заданного направления, присвойте FocusRequester.Default .
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Целевые показатели
- Фокусировка на текстовых полях
- Целевые показатели фокусировки группы
- Переместитесь и сфокусируйтесь.
- Программно запросить фокус
- Тестирование навигации по фокусу