支持键盘导航

除软键盘输入法外,例如屏幕输入法 键盘 - Android 支持连接到设备的物理键盘。答 键盘为用户提供了便捷的文字输入模式, 浏览应用并与之互动尽管大多数手持设备(例如 手机、平板电脑和类似设备以触控为主要互动模式 设备很受欢迎,许多用户喜欢将键盘配件 。

随着越来越多的 Android 设备提供这种体验, 您需要优化应用以支持通过键盘进行互动。本次 文档介绍了如何改进键盘导航。

<ph type="x-smartling-placeholder">

测试应用

用户或许已经能够使用键盘浏览您的应用,因为 则 Android 系统会默认启用大多数必要的行为。

Android 框架提供的所有交互式 widget,例如 ButtonEditText - 是 可聚焦这意味着用户可以通过控制设备(例如方向键或 键盘时,每个微件都会发光或改变其外观 获得输入焦点。

如需测试应用,请执行以下步骤:

  1. 在提供硬件键盘的设备上安装您的应用。

    如果您没有带键盘的硬件设备,请连接蓝牙 键盘或 USB 键盘。

    您也可以使用 Android 模拟器:

    1. 在 AVD 管理器中,点击 New Device,或者选择一个 现有配置文件,然后点击克隆
    2. 在显示的窗口中,确保键盘方向键
  2. 如需测试您的应用,只需使用 Tab 键即可浏览 界面。确保每个界面控件都按预期获得焦点。

    查找焦点意外移动的任何情况 。

  3. 从应用开头重新开始,并浏览界面 使用方向键(例如键盘上的箭头键)每个 界面中的可聚焦元素,请按 UpDown

    查找焦点意外移动的任何情况 。

如果您遇到任何使用 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

处理方向导航

用户还可以使用键盘上的箭头键在您的应用中导航, 与使用方向键或轨迹球导航时相同。系统 提供“最佳猜测”要在给定方向上聚焦于哪个视图 根据屏幕上的视图布局进行调整但有时 猜错了。

如果在导航界面中导航时系统没有将焦点传递给相应的视图 给定方向,请使用以下内容指定哪个视图必须获得焦点 属性:

每个属性都指定了当用户将焦点置于的下一个视图时, 按照数据视图 ID 所指定的方向朝该方向导航。如此处所示 示例:

<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"
    ...  />

其他资源

请参阅以下相关资源: