当前位置:网站首页>多模输入事件分发机制详解
多模输入事件分发机制详解
2022-07-04 19:46:00 【InfoQ】
一、 多模输入概述
二、输入事件和设备状态数据流介绍
- 输入事件分发过程会优先经过输入事件拦截模块,当有拦截器注册时,输入事件会终止继续上报,相应的拦截器会拦截所有输入事件。该事件拦截特性当前主要支持无障碍模式。
- 当没有拦截器注册时,输入事件会上报给输入事件监听模块,系统级应用(如:系统设置、桌面)通过监听输入事件,支持系统级特性(如:状态栏隐藏/消失等)。
- 事件监听模块对事件的监听不会阻断事件继续上报;支持事件监听的同时,输入事件还会继续上报。
- 对于按键事件会上报给订阅按键分发模块处理,分发给对应的应用处理,事件分发流程结束。
- 其他触摸屏事件和鼠标事件不会经过订阅按键分发模块,会继续上报给应用窗口处理。
三、多模输入事件分发原则
- 如没有鼠标上的按钮按下,当前鼠标指向哪个目标,鼠标输入事件就分发给坐标锁定的目标。
- 如果有鼠标上的按钮按下,以第一个按钮按下时刻鼠标坐标锁定的目标作为分发标的,直到所有的按钮都抬起。
- 触摸屏输入时,将第一个手指按下锁定的目标作为输入事件分发标的,直到所有的手指都抬起。
四、OpenHarmony 3.1版本新增接口说明
- 首先导入模块
// 输入法在软键盘显示逻辑中通过订阅物理键盘的状态:插入/拔出
// 根据isPhysicalkeyboardExist的值决定软键盘是否弹出
...
let isPhysicalkeyboardExist = false;
inputDevice.on("change", (callback) => {
console.log("type: " + callback.type + ", deviceId: " + callback.deviceId);
inputDevice.getDevice(callback.deviceId, (ret) => {
console.log("The keyboard type of the device is: " + ret);
if (ret == keyboard.ALPHABETIC_KEYBOARD && callback.type == 'add') { // 热插拔设备为键盘
isPhysicalkeyboardExist = true;
} else if (ret == keyboard.ALPHABETIC_KEYBOARD && callback.type == 'remove') {
isPhysicalkeyboardExist = false;
}
});
});
...
listener: function(data) {
console.log("type: " + data.type + ", deviceId: " + data.deviceId);
}
// 单独取消listener的监听。
inputDevice.off("change", this.listener);
// 取消所有监听
inputDevice.off("change");// 取消监听后,软键盘默认都弹出
边栏推荐
- Android原生数据库的基本使用和升级
- 实操自动生成接口自动化测试用例
- 二叉树的四种遍历方式以及中序后序、前序中序、前序后序、层序创建二叉树【专为力扣刷题而打造】
- JS closure
- go语言笔记(4)go常用管理命令
- Sword finger offer II 80-100 (continuous update)
- Après l'insertion de l'image dans le mot, il y a une ligne vide au - dessus de l'image, et la disposition est désordonnée après la suppression
- Win11系统wifi总掉线怎么办?Win11系统wifi总掉线的解决方法
- go笔记(3)Go语言fmt包的用法
- 最长的可整合子数组的长度
猜你喜欢
What if the win11 shared file cannot be opened? The solution of win11 shared file cannot be opened
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
针对深度学习的“失忆症”,科学家提出基于相似性加权交错学习,登上PNAS
Jiuqi ny8b062d MCU specification /datasheet
【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
【深度学习】一文看尽Pytorch之十九种损失函数
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
Win11系统wifi总掉线怎么办?Win11系统wifi总掉线的解决方法
MySQL - database query - use of aggregate function, aggregate query, grouping query
How does win11 search for wireless displays? Win11 method of finding wireless display device
随机推荐
The problem of the maximum difference between the left and right maxima
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
word中使用自动插入题注功能
Go language notes (4) go common management commands
idea插件
Form组件常用校验规则-1(持续更新中~)
How does win11 search for wireless displays? Win11 method of finding wireless display device
Idea configuration standard notes
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
Hash quiz game system development how to develop hash quiz game system development (multiple cases)
jekins初始化密码没有或找不到
Win11无法将值写入注册表项如何解决?
js 闭包
What if win11u disk refuses access? An effective solution to win11u disk access denial
RFID仓储管理系统解决方案的优点
长城证券开户安全吗 股票开户流程网上开户
Leetcode+ 81 - 85 monotone stack topic
Is it safe for Great Wall Securities to open an account? Stock account opening process online account opening
哈希表、哈希函数、布隆过滤器、一致性哈希
Jekins initialization password not found or not found