当前位置:网站首页>多模輸入事件分發機制詳解
多模輸入事件分發機制詳解
2022-07-04 21:00: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");// 取消監聽後,軟鍵盤默認都彈出
边栏推荐
- 电脑共享打印机拒绝访问要怎么办
- go语言笔记(2)go一些简单运用
- In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
- jekins初始化密码没有或找不到
- Advantages of semantic tags and block level inline elements
- 【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
- Summary of the mistakes in the use of qpainter in QT gobang man-machine game
- 记录线上bug解决list(未完待续7/4)
- [server data recovery] a case of RAID5 data recovery stored in a brand of server
- Go language notes (4) go common management commands
猜你喜欢
电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法
How to solve the problem that win11 cannot write the value to the registry key?
Idea restore default shortcut key
Flet tutorial 06 basic introduction to textbutton (tutorial includes source code)
Ten years' experience of byte test engineer directly hits the pain point of UI automation test
6月“墨力原创作者计划”获奖名单公布!邀您共话国产数据库
Understand Alibaba cloud's secret weapon "dragon architecture" in the article "science popularization talent"
Form组件常用校验规则-1(持续更新中~)
hash 表的概念及应用
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
随机推荐
LeetCode+ 81 - 85 单调栈专题
接口設計時的一些建議
MySQL - database query - use of aggregate function, aggregate query, grouping query
Hash哈希竞猜游戏系统开发如何开发丨哈希竞猜游戏系统开发(多套案例)
Win11U盘拒绝访问怎么办?Win11U盘拒绝访问的有效解决方法
易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
嵌入式TC 测试用例
BFC interview Brief
The problem of the maximum difference between the left and right maxima
Jiuqi ny8b062d MCU specification /datasheet
LeetCode 8. String conversion integer (ATOI)
Common verification rules of form components -1 (continuously updating ~)
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
【服务器数据恢复】某品牌服务器存储raid5数据恢复案例
How does the computer save web pages to the desktop for use
LeetCode 871. 最低加油次数
word中插入圖片後,圖片上方有一空行,且删除後布局變亂
RFID仓库管理系统解决方案有哪些功能模块
Ten years' experience of byte test engineer directly hits the pain point of UI automation test
哈希表、哈希函数、布隆过滤器、一致性哈希