实体键盘事件
Fuchsia 的键盘服务提供了一种提供实体键盘的机制。 所有感兴趣的客户
渲染的文档
概览
关键事件只会传送到通过 Keyboard
FIDL 订阅的组件
协议。对该服务感兴趣的组件,应在
组件清单,并在组件启动时对其进行注入。
典型用例:
- 使用 Tab 键在表单字段之间导航。
- 在菜单或列表中使用箭头键进行导航。
- 按“f”可从菜单中打开文件。
- 正在关闭 ESC 上的弹出式窗口。
- 游戏中的 WASD 导航。
传送媒体按钮、快捷方式和文本输入 (IME) 相关事件 通过专用接口单独访问。
关键事件只会传送给街景焦点链中的组件。 只有聚焦的组件会收到按键事件。
按键事件按从根到叶的顺序传递,即父组件优先。
父级组件能够通过
通过返回 KeyEventStatus.Handled
来KeyboardListener.OnKeyEvent
,以防止
事件的传播。
客户端会通过 Pressed
收到按键被按下或释放的通知,并
Released
事件类型。
当客户端不可用时,系统会通知客户端按下或释放按键
(例如,未聚焦或未启动)通过 Sync
和 Cancel
事件类型实现。这些
只针对相关事件提供事件,例如同时按住多个键
客户端不可用。
示例
use fidl_fuchsia_ui_input3 as ui_input;
let keyboard = connect_to_protocol::<ui_input::KeyboardMarker>()
.context("Failed to connect to Keyboard service")?;
let (listener_client_end, mut listener_stream) =
create_request_stream::<ui_input::KeyboardListenerMarker>()?;
keyboard.add_listener(view_ref, listener_client_end).await.expect("add_listener");
match listener_stream.next().await {
Some(Ok(ui_input::KeyboardListenerRequest::OnKeyEvent { event, responder, .. })) => {
assert_eq!(event.key, Some(fuchsia_input::Key::A));
responder.send(ui_input::Status::Handled).expect("response from key listener")
},
}
协议
KeyEventInjector
在 fuchsia.ui.input3/keyboard.fidl 中定义
提供将 KeyEvent
注入键盘子系统的功能。
角色
此协议通常为:
- 由处理和提供键盘的平台组件实现 事件。
- 由发起键盘事件的组件使用。例如: 屏幕键盘或会话框架输入管道。
相关协议
该协议应优先使用,而不是提供 功能类似具体而言,这意味着应首选此协议 超过
fuchsia.ui.input.ImeService
,可提供InjectInput()
、DispatchKey()
、 和DispatchKey3()
fuchsia.ui.input.InputMethodEditor
,它提供InjectInput()
和DispatchKey3()
备注
产品应注意限制对此协议的访问,因为注入事件 与实体设备的数据无法区分。
注入
将事件注入键盘子系统。
返回
- 如果键盘子系统将事件传递给使用方,则为
HANDLED
; 且消费者报告它会HANDLED
事件 NOT_HANDLED
(如果键盘子系统未将事件传递至 任何消费者或没有消费者报告HANDLED
该事件。
请求
名称 | 类型 |
---|---|
key_event |
KeyEvent
|
响应
名称 | 类型 |
---|---|
status |
KeyEventStatus
|
键盘
在 fuchsia.ui.input3/keyboard.fidl 中定义
组件可从其命名空间请求此服务,以便 实体按键事件
AddListener
为指定视图添加关键事件监听器。
如果添加了多个监听器,每个监听器都会单独接收按键事件,
应以 Status
响应。
调用 AddListener
的客户端应使与 Keyboard
的连接保持活跃状态
只要从 KeyboardListener
接收事件即可。将
到 Keyboard
协议的连接也会终止 KeyboardListener
。
请求
名称 | 类型 |
---|---|
view_ref |
fuchsia.ui.views/ViewRef
|
listener |
KeyboardListener
|
响应
<空>
KeyboardListener
在 fuchsia.ui.input3/keyboard.fidl 中定义
客户端应实现此协议以获取有关关键事件的通知。
OnKeyEvent
在发生按键事件(例如按键或释放)时调用。
协议实现者必须通过返回 Status 来做出响应来确认事件 及时处理,即不给整个流程造成严重延误。 输入流水线(通常为 10 秒)。
返回 NOT_HANDLED
意味着相应活动可能会提供给其他方
其他相关 API 的客户端。
未确认事件的客户端最终将断开连接。
通知仅会发送给具有焦点的视图。没有其他数据视图
(包括家长或孩子)将通过OnKeyEvent
专门收到通知。
请求
名称 | 类型 |
---|---|
event |
KeyEvent
|
响应
名称 | 类型 |
---|---|
status |
KeyEventStatus
|
精英
KeyEventStatus 严格
类型:uint32
在 fuchsia.ui.input3/keyboard.fidl 中定义
客户端关键事件监听器的返回类型。
我们预计不会向此枚举添加新值。
名称 | 值 | 说明 |
---|---|---|
手持式 |
1 |
已处理关键事件,应停止其进一步传播。 |
NOT_HANDLED |
2 |
按键事件未处理,应传递给其他客户端或监听器。 |
KeyEventType 严格
类型:uint32
在 fuchsia.ui.input3/events.fidl 中定义
键盘按键输入事件类型。
我们预计不会向此枚举添加新值。
名称 | 值 | 说明 |
---|---|---|
已按下 |
1 |
密钥已激活。 收到此类事件类型意味着密钥已激活 接收事件时的时间戳,而事件 焦点所在。 例如,如果按键是键盘按键, 已按下。 |
新歌速递 |
2 |
密钥已停止启动。 收到此类事件类型意味着键已失效 接收事件时的时间戳,而事件 焦点所在。 例如,如果按键是键盘按键, 发布。 |
同步 |
3 |
客户端无法接收密钥时已激活密钥, 由于客户端能够接收 关键事件 可能的情况包括:
因此,这不是一个“常规”键的执行它会报告 因为密钥是在未知的过往启动的。部分 因此,活动接收者可能会认为这不是 一些可操作的关键事件,但也有一些用户可能将它判定为可操作关键事件。 例如,触发某些用户操作的收件人
决定忽略 |
取消 |
4 |
键可能已启动,但其已启动 因非键事件而失效 减激活。 可能的情况包括:
因此,这不是一个“常规”密钥停用。它会报告 该键由于除以下事件之外的其他事件而不再有效激活 发布密钥因此,某些活动接收者可能会决定 这不是可作为行动依据的关键事件,而另一些 决定。 例如,触发某些用户操作的收件人
决定忽略 |
NonPrintableKey 柔性
类型:uint32
在 fuchsia.ui.input3/events.fidl 中定义
NonPrintableKey 表示键盘上非符号键的含义。
每个键的定义都派生自键的 W3C 命名值 属性。
API 版本 9 及更高版本
从 API 版本 9 开始,根据 “已命名的关键属性值”部分的子部分编号,相乘 乘以 0x1000。
例如,3.10 多媒体键部分中的键将位于
0xa000
-0xafff
。存在的值和预留
未移动,
逻辑上按照现有部分的值已插入
按照前面的惯例(见下文)转化为逻辑位置。这样,
如果出于某种原因,我们可以提取区段范围,
应用。
API 版本 9 之前
不可打印键的空间大致分为 文档“已命名键属性值”第 3 节的子部分。 部分值是任意的,只要将 同时分配多个值,而保留具有类似用途的键 。
预留范围
[NonPrintableKey] 的可能值的空间细分为 范围的数量,目的是将枚举值放置在 适当的范围
- 特殊键:0x00-0x10
- 辅助键:0x11-0x30
- 空白键:0x31-0x40
- 导航键:0x61-0x80
- 通用功能键:0x9000-0x9FFF
名称 | 值 | 说明 |
---|---|---|
不明 |
0 |
当实现无法识别 其他键值对,由于硬件、平台或软件 限制条件。 添加时间:9
|
ALT |
17 |
Alt(备用)键。 此键启用用于解释并发的备用辅助键函数 或后续的键盘输入。 此键值也用于 Apple Option 键。 添加时间:9
|
ALT_GRAPH |
18 |
替代图形(AltGr 或 AltGraph)。 此键用于启用 ISO 级别 3 的 Shift 辅助键(标准的 Shift 键是级别 2 修饰符)。请参阅 ISO9995-1。 添加时间:9
|
CAPS_LOCK |
19 |
大写锁定(大写)键。 切换用于解释后续键盘输入事件的大写字符锁定功能。 添加时间:9
|
对照组 |
20 |
Ctrl 或 Ctrl 键,用于启用 Control 辅助键功能以解释并发或 后续键盘输入。 添加时间:9
|
FN |
21 |
功能开关 Fn 键。 如果同时启用此键和另一个键,系统会将该键的值更改为备用键 字符或函数。该按键通常直接在键盘硬件中处理, 通常不会产生关键事件。 添加时间:9
|
FN_LOCK |
22 |
功能锁定(FnLock 或 F-Lock)键。 启用此键会切换键盘模式以更改某些按键值更改为 替代字符或函数。该按键通常直接在键盘硬件中处理 通常不会产生关键事件。 添加时间:9
|
META |
23 |
Meta 键,用于启用元修饰符函数来解释并发或后续 键盘输入。 此键值用于 Windows 徽标键和 Apple Command 或 ⌘ 键。 添加时间:9
|
NUM_LOCK |
24 |
NumLock 或数字锁定键,可切换数字小键盘模式功能,以解读后续 键盘输入。 添加时间:9
|
SCROLL_LOCK |
25 |
滚动锁定键,用于在滚动模式和光标移动模式之间切换。 添加时间:9
|
Shift 键 |
26 |
Shift 键,可启用 Shift 辅助键函数以解释并发或后续 键盘输入。 添加时间:9
|
SYMBOL |
27 |
符号辅助键(用于某些虚拟键盘)。 添加时间:9
|
SYMBOL_LOCK |
28 |
“符号锁定”键。 添加时间:9
|
HYPER |
29 |
Hyper 键。旧版修饰符。 添加时间:9
|
字幕 |
30 |
超级键。旧版修饰符。 添加时间:9
|
进入 |
49 |
按 Enter 键或 ↵ 键可激活当前选择或接受当前输入内容。 该键值还用于 Return(Macintosh 数字键盘)键。 |
Tab |
50 |
水平制表符 Tab 键。 |
回格 |
65 |
删除紧接光标前的字符(即 字符)。 |
DOWN |
97 |
向下箭头导航键。 |
剩余 |
98 |
向左键导航键。 |
右 |
99 |
向右箭头导航键。 |
UP |
100 |
向上键导航键。 |
结束 |
101 |
“End”键。 |
HOME |
102 |
“家”键。 |
PAGE_DOWN |
103 |
“Page Down”键。 |
PAGE_UP |
104 |
“Page Up”键。 |
Esc |
24581 |
添加时间:10
|
SELECT |
24588 |
Select 键。用于选择要聚焦的任务窗口。 添加时间:10
|
BRIGHTNESS_DOWN |
28672 |
“调低亮度”键。通常控制显示屏亮度。 添加时间:10
|
BRIGHTNESS_UP |
28673 |
“调高亮度”键。通常控制显示屏亮度。 添加时间:10
|
F1 |
36865 |
F1 键,即通用功能键,索引为 1。 添加时间:9
|
F2 |
36866 |
F2 键,通用功能键,索引 2。 添加时间:9
|
F3 |
36867 |
F3 键,即通用功能键,索引为 3。 添加时间:9
|
F4 |
36868 |
F4 键,即通用功能键,索引为 4。 添加时间:9
|
F5 |
36869 |
F5 键,一个通用功能键,索引为 5。 添加时间:9
|
F6 |
36870 |
F6 键,一个通用功能键,索引为 6。 添加时间:9
|
F7 |
36871 |
F7 键,即通用功能键,索引为 7。 添加时间:9
|
F8 |
36872 |
F8 键,一个通用功能键,索引为 8。 添加时间:9
|
F9 |
36873 |
F9 键,通用功能键,索引 9。 添加时间:9
|
F10 |
36874 |
F10 键,即通用功能键,索引为 10。 添加时间:9
|
F11 |
36875 |
F11 键,即通用功能键,索引为 11。 添加时间:9
|
F12 |
36876 |
F1 键,即通用功能键,索引为 12。 添加时间:9
|
SOFT_1 |
36881 |
通用虚拟功能键,索引为 1。 添加时间:9
|
SOFT_2 |
36882 |
通用虚拟功能键,索引为 2。 添加时间:9
|
SOFT_3 |
36883 |
通用虚拟功能键,索引为 3。 添加时间:9
|
SOFT_4 |
36884 |
通用虚拟功能键,索引为 4。 添加时间:9
|
MEDIA_PLAY_PAUSE |
40968 |
暂停当前正在播放的媒体。 注意:媒体控制器设备应使用此值,而不是
添加时间:10
|
AUDIO_VOLUME_DOWN |
49162 |
调低音量。 添加时间:10
|
AUDIO_VOLUME_UP |
49163 |
调高音量。 添加时间:10
|
AUDIO_VOLUME_MUTE |
49164 |
在静音状态和之前的音量之间切换。 添加时间:10
|
BROWSER_BACK |
61440 |
转到当前历史记录中的上一个内容或页面。 添加时间:10
|
BROWSER_FAVORITES |
61441 |
打开浏览器收藏夹列表。 添加时间:10
|
BROWSER_FORWARD |
61442 |
转到当前历史记录中的下一个内容或页面。 添加时间:10
|
BROWSER_HOME |
61443 |
前往用户的首选首页。 添加时间:10
|
BROWSER_REFRESH |
61444 |
刷新当前网页或内容。 添加时间:10
|
BROWSER_SEARCH |
61445 |
调用用户的首选搜索页。 添加时间:10
|
BROWSER_STOP |
61446 |
添加时间:10
|
ZOOM_TOGGLE |
73799 |
在全屏内容和缩放内容之间切换,或更改放大级别。 添加时间:10
|
表格
KeyEvent
在 fuchsia.ui.input3/events.fidl 中定义
生成的键盘事件,以反映按键输入。必须提供“timestamp
”和“type
”。
为有效事件,必须至少设置 key
和 key_meaning
中的一个。
Ordinal | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
timestamp |
zx/Time
|
记录事件的时间,以 |
2 |
type |
KeyEventType
|
事件类型。 |
3 |
key |
fuchsia.input/Key
|
识别忽略辅助键、布局、之前的按键事件等的按键。这称为 “实体键”。在关键事件并非源自的情况下 (例如屏幕键盘)时,此字段可能为空。 |
4 |
modifiers |
Modifiers
|
事件发生时有效的修饰符。 示例: CapsLock 处于关闭状态,用户先按 CapsLock,然后按 A,然后松开两者。 事件顺序如下:
CapsLock 已开启,用户先按 CapsLock 键,再按 A 键,然后松开两者。
|
5 |
key_meaning |
KeyMeaning
|
键的含义。 |
6 |
repeat_sequence |
uint32
|
此 如果此事件是在对
输入文字。如果 |
7 |
lock_state |
LockState
|
事件发生时有效的锁定状态。 例如,如果 CapsLock 效果已打开(按“a”键 效果“A”),系统会设置锁定状态中的相应位。 注意: |
联合体
关键含义严格
在 fuchsia.ui.input3/events.fidl 中定义
按键的含义。这通常是插入 或表示与空格或 采用其他方式无法打印
Ordinal | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
codepoint |
uint32
|
表示所输入字符的 Unicode 代码点(如果有)。
|
2 |
non_printable_key |
NonPrintableKey
|
关键事件对应的键的含义(没有对应符号)。 |
位
LockState 柔性环境
类型:uint64
在 fuchsia.ui.input3/modifiers.fidl 中定义
当前处于活动状态的锁定状态的位字段。
锁定状态会报告具有锁定功能的钥匙的锁定功能是否处于启用状态 (需要按下一次即可启用,再按一次即可停用)。 设置位表示有效锁定状态。
例如,当 Caps Lock 键处于启用状态时,即按“a”键就能产生
的“A”CAPS_LOCK
位将处于活动状态。
LockState
中的位值被选择为与
Modifiers
,但前提是这可以长期使用。
名称 | 值 | 说明 |
---|---|---|
CAPS_LOCK |
1 | 在 用户应注意, 例如,按美式 QWERTY 键盘上的 字母按键的位置可能因 。 |
NUM_LOCK |
2 | 在 |
SCROLL_LOCK |
4 | 在 |
FUNCTION_LOCK |
8 | 在 |
SYMBOL_LOCK |
16 | 在 |
修饰符柔性环境
类型:uint64
在 fuchsia.ui.input3/modifiers.fidl 中定义
声明 Fuchsia 的输入子系统支持的所有修饰符。
修饰符是特殊键,用于修改用途或功能 与其他键组合使用时在“修饰符”类型中 如果特定的辅助键处于激活状态(按住),则也会设置位; 而不会影响修饰符是否具有关联的锁定状态。
注意:如果您想检查锁定状态(例如, Lock 需要将所有字母变成大写),您需要 [LockState] 。
有点特别,为了方便用户, “左”和“right”变种具有特殊的位值 。
名称 | 值 | 说明 |
---|---|---|
CAPS_LOCK |
1 | 在 |
NUM_LOCK |
2 | 在 |
SCROLL_LOCK |
4 | 在 |
功能 |
8 | 在 |
SYMBOL |
16 | 在 |
LEFT_SHIFT |
32 | 在左 SHIFT 修饰符激活时应用。 |
RIGHT_SHIFT |
64 | 在正确的 SHIFT 修饰符被激活时应用。 |
Shift 键 |
128 | 在 此位会掩盖为测试任一 |
LEFT_ALT |
256 | 当左侧 |
RIGHT_ALT |
512 | 在正确的 |
ALT |
1024 | 当左侧 |
ALT_GRAPH |
2048 | 在 |
LEFT_META |
4096 | 在 |
RIGHT_META |
8192 | 在 |
META |
16384 | 在 |
LEFT_CTRL |
32768 | 在 |
RIGHT_CTRL |
65536 | 在 |
CTRL |
131072 | 在 |