Помимо программных методов ввода, таких как экранные клавиатуры, Android поддерживает физические клавиатуры, подключаемые к устройству. Клавиатура предлагает удобный способ ввода текста и позволяет пользователям перемещаться по приложению и взаимодействовать с ним. Хотя большинство портативных устройств, таких как телефоны, используют сенсорное управление в качестве основного способа взаимодействия, планшеты и аналогичные устройства популярны, и многие пользователи предпочитают подключать к ним клавиатуры.
Поскольку все больше устройств на базе Android предлагают подобный пользовательский опыт, важно оптимизировать ваше приложение для поддержки взаимодействия с помощью клавиатуры. В этом документе описано, как улучшить навигацию с помощью клавиатуры.
Протестируйте своё приложение
Пользователи, возможно, уже умеют перемещаться по вашему приложению с помощью клавиатуры, поскольку система Android по умолчанию включает большинство необходимых функций.
Все интерактивные виджеты, предоставляемые фреймворком Android, такие как Button и EditText , являются фокусируемыми. Это означает, что пользователи могут перемещаться по элементам управления, таким как D-pad или клавиатура, и каждый виджет подсвечивается или иным образом меняет свой внешний вид при получении фокуса ввода.
Для тестирования вашего приложения выполните следующую процедуру:
- Установите приложение на устройство, оснащенное аппаратной клавиатурой.
Если у вас нет устройства с клавиатурой, подключите Bluetooth-клавиатуру или USB-клавиатуру.
Вы также можете использовать эмулятор Android:
- В диспетчере AVD нажмите кнопку «Новое устройство» или выберите существующий профиль и нажмите кнопку «Клонировать» .
- В появившемся окне убедитесь, что клавиатура и D-pad включены.
- Для тестирования приложения используйте только клавишу Tab для навигации по пользовательскому интерфейсу. Убедитесь, что каждый элемент управления получает фокус должным образом.
Обратите внимание на любые случаи, когда фокус внимания смещается неожиданным образом.
- Начните заново с самого начала работы над приложением и перемещайтесь по пользовательскому интерфейсу, используя элементы управления направлением, такие как стрелки на клавиатуре. Для каждого фокусируемого элемента в пользовательском интерфейсе нажмите клавиши «Вверх» , «Вниз» , «Влево» и «Вправо» .
Обратите внимание на любые случаи, когда фокус внимания смещается неожиданным образом.
Если вы столкнетесь с ситуациями, когда навигация с помощью клавиши Tab или элементов управления направлением не дает ожидаемого результата, укажите, где должен находиться фокус в вашем макете, как описано в следующих разделах.
Навигация по вкладкам Handle
Когда пользователь перемещается по вашему приложению с помощью клавиши 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" ... />
Дополнительные ресурсы
Обратитесь к следующим соответствующим ресурсам:
