用户通常一次与一个界面窗口进行交互。概括来讲,焦点标识了一个获取用户交互的界面窗口。
焦点标识一个视图
界面窗口由 Fuchsia 视图构成,通常只有一个视图。焦点在这些视图之间移动,并且这些视图必须连接到全局视图树。当焦点移至某个视图时,系统会通知该视图已获得焦点,并通知之前聚焦的视图已失去焦点。
始终有聚焦视图。如果聚焦的视图与视图树断开连接,该视图会失去焦点,而该视图的父项会获得焦点。
界面客户端对焦点的使用因应用而异
当界面客户端的视图获得焦点时,界面客户端可以使用该位来推动特定于应用的用户互动行为。例如,它可能会开始闪烁光标以表明其视图处于活动状态、强化 widget 颜色,或执行界面布局更改。
焦点和输入模式
某些输入模式(例如键盘快捷键和快捷键)基于焦点构建互动模型。例如,只有获得焦点的视图才能与用户的键盘交互。失去焦点的视图无法接收键盘事件。
触控和鼠标等其他输入模式在推动焦点更改方面可能发挥更大作用。下面给出了一些示例。
当新的输入模式添加到 Fuchsia 时,它们的设计工作需要与现有焦点模型相适应。
每个产品都会定义焦点何时移动
Fuchsia 对焦点的放置位置有一些规则,但并未过多说明焦点移动。从机制上讲,焦点是使用 Focuser API 调用在视图之间移动的,但每个产品都应针对何时应在视图之间移动焦点,定义自己的政策。
例如,工作站类型的产品可以选择将焦点移至鼠标光标点击处的视图上。或者,触摸屏产品可以选择在用户最初触摸屏幕时将焦点移到用户手指下方的视图中。或者,无障碍功能可以选择将焦点移至某个视图,由人声命令或特殊手势驱动。
每个产品都以重点为基础,旨在提供自己的保证
通过以创造性的方式使用焦点规则,产品可以构建特定于其自身用途的保证。例如,工作站类型的产品可能希望确保锁定屏幕不会将键盘事件“泄露”到锁定对话框后面的任何界面窗口。如果界面窗口的视图与视图树断开连接,该窗口将无法获得焦点,因此就无法与键盘交互。