用户与应用互动时,通常会使用非触控输入机制:
- 桌面环境:用户通过实体硬件键盘和触控板来浏览和输入数据。
- Android TV:用户使用方向键浏览界面。
- 汽车:驾驶员和乘客使用旋控器进行互动。
- 可折叠设备和平板电脑:用户连接键盘保护套和外部输入配件。
在所有这些场景中,您的应用都必须跟踪屏幕上处于活动状态的互动元素,这种活动状态称为焦点。
实现直观键盘导航的关键因素
为了在大屏设备和非触控设备上提供出色的用户体验,请遵循以下原则设计应用:
- 逻辑初始焦点:将初始焦点放置在用户进入屏幕时最有可能与之互动的元素上。
- 一致的导航顺序:提供可预测的一维(Tab 键)和二维(箭头键或方向键)焦点遍历。
- 持久焦点:在中断、对话框关闭或配置更改后无缝恢复焦点。
- 清晰的焦点状态:显示醒目的无障碍视觉提示(例如焦点环或涟漪),指示当前哪个元素处于焦点状态。
- 直观的滚动:确保焦点元素及其周围上下文顺畅地滚动到可见视口中。
专注模式指南
请参阅以下指南,了解如何在 Compose 中管理和自定义焦点:
- 焦点目标:了解互动式组件如何成为焦点目标,以及如何使自定义可组合项可聚焦。
- 焦点遍历顺序:了解一维外观顺序和二维空间导航,以及如何自定义遍历路径。
- 文本字段中的焦点:了解单行和多行文本字段如何处理 Tab 键和箭头键,以及电视 IME 互动如何运作。
- 对焦点目标进行分组:使用
focusGroup对组件进行分组,并拦截入口或出口重定向。 - 恢复焦点:将焦点恢复到容器中之前处于活动状态的子项,处理导航组件,以及管理屏幕过渡期间的焦点。
- 指示焦点状态:应用视觉提示和自定义指示来突出显示聚焦的组件。
- 对焦点做出反应:使用
onFocusChanged观察焦点变化并查询焦点状态属性。 - 以编程方式请求焦点:明确地移动焦点以响应用户操作或验证错误。
- 移动和清除焦点:使用
FocusManager以编程方式前进或清除焦点。 - 捕获和释放焦点:捕获模态子互动的焦点并安全地释放它。
- 测试焦点导航:编写自动化 Compose 测试,以验证一维、二维和文本字段键盘互动。