Когда пользователи перемещаются по пользовательскому интерфейсу Compose с помощью аппаратной клавиатуры, D-pad или поворотного контроллера, текстовые поля участвуют в навигации по фокусу наряду с другими целями фокусировки.
По умолчанию фокус не задерживается в текстовых полях. Вам не нужно добавлять специальные обработчики событий нажатия клавиш (onKeyEvent или onPreviewKeyEvent), чтобы пользователи могли выйти из текстового поля. Пользователи всегда могут выйти из него, нажав Shift + Tab или переместившись за границы текста с помощью клавиш со стрелками.
KeyboardOptions можно использовать для интуитивно понятного действия виртуальной клавиатуры, которое координируется с навигацией по аппаратной клавиатуре.
Например, ImeAction.Next перемещает фокус на следующий объект.
Одномерный переход по фокусу
При одномерном перемещении фокуса поведение клавиши Tab зависит от параметра lineLimits, настроенного для текстового поля.
- Однострочные текстовые поля (
TextFieldLineLimits.SingleLine) При нажатии клавиши Tab фокус перемещается на следующий элемент интерфейса. - Многострочные текстовые поля (
TextFieldLineLimits.MultiLine()или по умолчанию). При нажатии клавиши Tab в буфер текста вставляется символ табуляции (\t), а не перемещается фокус. - Обратная навигация (Shift + Tab). Нажатие Shift + Tab безусловно перемещает фокус назад к предыдущему целевому объекту как в однострочных, так и в многострочных текстовых полях.
// Single-line text field: Tab advances focus to the next focus target BasicTextField( state = singleLineState, lineLimits = TextFieldLineLimits.SingleLine, modifier = Modifier.fillMaxWidth() ) // Multi-line text field: Tab inserts '\t'; Shift + Tab moves to previous target BasicTextField( state = multiLineState, lineLimits = TextFieldLineLimits.MultiLine(), modifier = Modifier.fillMaxWidth() )
Двумерный обход фокуса
При использовании клавиш со стрелками (или d-pad) клавиши направления сначала перемещают текстовый курсор (каретку) внутри текстового поля:
- Вертикальная навигация (вверх / вниз). Нажатие клавиши
Downперемещает курсор вниз по строкам. Когда курсор достигает последней строки, повторное нажатие клавиши Вниз переносит фокус на соседний целевой объект под текстовым полем. Если нажать клавишу Вверх на первой строке, фокус переместится на предыдущий объект. - Горизонтальная навигация (влево, вправо, в начало, в конец). Нажатие клавиш со стрелками влево и вправо перемещает курсор по символам. Когда курсор достигает начала или конца текстового буфера, повторное нажатие клавиши со стрелкой переносит фокус на соседний целевой объект в этом направлении.
Текстовые поля на Android TV
На Android TV при использовании контроллеров D-pad без физической клавиатуры:
- При перемещении фокуса на текстовое поле автоматически появляется экранная клавиатура.
- Пользователь перемещается по клавишам виртуальной клавиатуры с помощью D-pad.
- Нажатие кнопки Назад закрывает виртуальную клавиатуру, сохраняя фокус на текстовом поле.
- После закрытия виртуальной клавиатуры нажатие клавиш направления на D-pad перемещает фокус на соседние объекты на экране.
- Если нажать кнопку Назад ещё раз, сработает стандартная системная навигация.
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Цели фокусировки
- Порядок обхода фокуса
- Цели по группам
- Как протестировать навигацию с фокусом