Помимо экранных клавиатур, Android поддерживает физические клавиатуры, подключенные к устройству. Клавиатура – это удобный способ ввода текста, навигации и взаимодействия с приложением. Хотя на большинстве портативных устройств, например телефонах, основным способом взаимодействия является сенсорный экран, планшеты и подобные устройства также популярны, и многие пользователи подключают к ним клавиатуру.
Поскольку все больше устройств Android поддерживают такой режим, важно оптимизировать приложение для работы с клавиатурой. В этой статье рассказывается, как улучшить навигацию с помощью клавиатуры.
Тестирование приложения
Возможно, пользователи уже могут перемещаться по вашему приложению с помощью клавиатуры, поскольку система Android по умолчанию включает большинство необходимых функций.
Все интерактивные виджеты, предоставляемые фреймворком Android, такие как Button и EditText, поддерживают фокус. Это означает, что пользователи могут перемещаться с помощью устройств управления, таких как d-pad или клавиатура, и каждый виджет светится или иным образом меняет свой внешний вид, когда он получает фокус ввода.
Чтобы протестировать приложение, выполните следующие действия:
- Установите приложение на устройство с аппаратной клавиатурой.
Если у вас нет устройства с клавиатурой, подключите клавиатуру Bluetooth или USB.
Вы также можете использовать эмулятор Android:
- В Менеджере AVD нажмите New Device (Новое устройство) или выберите существующий профиль и нажмите Clone (Клонировать).
- В открывшемся окне убедитесь, что включены параметры Keyboard (Клавиатура) и DPad (Кнопки со стрелками).
- Чтобы протестировать приложение, используйте только клавишу Tab для навигации по интерфейсу. Убедитесь, что фокус перемещается на каждый элемент управления пользовательского интерфейса.
Обратите внимание на случаи, когда фокус перемещается неожиданным образом.
- Вернитесь в начало приложения и перемещайтесь по интерфейсу с помощью клавиш со стрелками на клавиатуре. Нажмите Вверх, Вниз, Влево и Вправо на каждом элементе интерфейса, на котором можно установить фокус.
Обратите внимание на случаи, когда фокус перемещается неожиданным образом.
Если вы обнаружите, что навигация с помощью клавиши Tab или элементов управления направлением работает не так, как ожидалось, укажите, где должен быть фокус в макете, как описано в следующих разделах.
Как управлять навигацией по вкладкам
Когда пользователь перемещается по приложению с помощью клавиши Tab, фокус ввода переходит между элементами в том порядке, в котором они расположены в макете. Если вы используете относительный макет и порядок элементов на экране отличается от порядка в файле, вам может потребоваться вручную указать порядок фокуса.
Например, в следующем макете две кнопки выровнены по правому краю, а текстовое поле – по левому краю второй кнопки. Чтобы фокус переходил с первой кнопки на текстовое поле, а затем на вторую кнопку, в макете нужно явно определить порядок фокусировки для каждого из фокусируемых элементов с помощью атрибута android:nextFocusForward.
<androidx.constraintlayout.widget.ConstraintLayout ...> <Button android:id="@+id/button1" android:nextFocusForward="@+id/editText1" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" ... /> <Button android:id="@+id/button2" android:nextFocusForward="@+id/button1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/button1" ... /> <EditText android:id="@id/editText1" android:nextFocusForward="@+id/button2" app:layout_constraintBottom_toBottomOf="@+id/button2" app:layout_constraintRight_toLeftOf="@id/button2 ... /> ... </androidx.constraintlayout.widget.ConstraintLayout>
Теперь фокус перемещается не с button1 на button2, а затем на editText1, а в соответствии с расположением на экране: с button1 на editText1, а затем на button2.
Обработка навигации по направлениям
Пользователи также могут перемещаться по приложению с помощью клавиш со стрелками на клавиатуре, которые работают так же, как и при навигации с помощью d-pad или трекбола. Система предоставляет "наилучшее предположение" о том, какому представлению следует уделить внимание в данном направлении на основе макета представлений на экране. Однако иногда система ошибается.
Если система не передает фокус соответствующему представлению при навигации в заданном направлении, укажите, какое представление должно получить фокус, используя следующие атрибуты:
Каждый атрибут указывает следующее представление, которое получит фокус, когда пользователь перемещается в этом направлении, как указано в идентификаторе представления. Это показано в следующем примере:
<Button android:id="@+id/button1" android:nextFocusRight="@+id/button2" android:nextFocusDown="@+id/editText1" ... /> <Button android:id="@id/button2" android:nextFocusLeft="@id/button1" android:nextFocusDown="@id/editText1" ... /> <EditText android:id="@id/editText1" android:nextFocusUp="@id/button1" ... />
Дополнительные ресурсы
Ознакомьтесь со следующей информацией по теме: