除软键盘输入法外,例如屏幕输入法 键盘 - Android 支持连接到设备的物理键盘。答 键盘为用户提供了便捷的文字输入模式, 浏览应用并与之互动尽管大多数手持设备(例如 手机、平板电脑和类似设备以触控为主要互动模式 设备很受欢迎,许多用户喜欢将键盘配件 。
随着越来越多的 Android 设备提供这种体验, 您需要优化应用以支持通过键盘进行互动。本次 文档介绍了如何改进键盘导航。
<ph type="x-smartling-placeholder">测试应用
用户或许已经能够使用键盘浏览您的应用,因为 则 Android 系统会默认启用大多数必要的行为。
Android 框架提供的所有交互式 widget,例如
Button
和
EditText
- 是
可聚焦这意味着用户可以通过控制设备(例如方向键或
键盘时,每个微件都会发光或改变其外观
获得输入焦点。
如需测试应用,请执行以下步骤:
- 在提供硬件键盘的设备上安装您的应用。
如果您没有带键盘的硬件设备,请连接蓝牙 键盘或 USB 键盘。
您也可以使用 Android 模拟器:
- 在 AVD 管理器中,点击 New Device,或者选择一个 现有配置文件,然后点击克隆。
- 在显示的窗口中,确保键盘和方向键 。
- 如需测试您的应用,只需使用 Tab 键即可浏览
界面。确保每个界面控件都按预期获得焦点。
查找焦点意外移动的任何情况 。
- 从应用开头重新开始,并浏览界面
使用方向键(例如键盘上的箭头键)每个
界面中的可聚焦元素,请按 Up、Down,
左和右。
查找焦点意外移动的任何情况 。
如果您遇到任何使用 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" ... />
其他资源
请参阅以下相关资源: