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