概述
随着用户输入的多样化发展,一个应用程序需要响应多种输入事件,以支持用户使用不同的输入设备(方式)与其进行交互(例如使用遥控器、语音等同时操控智慧屏)。同时,开发者针对同一输入动作的处理,存在不同的设计,这就给用户造成了体验上的差异。
多模输入在已支持的输入事件的基础上,将用户常用的一些输入动作定义为一组标准化事件,将不同输入设备的输入事件映射到标准化事件上。使用户在使用多种输入设备操作不同的终端设备或应用时,能够得到统一的体验。
基础事件
将手指在触屏上操作产生的原始事件定义为基础事件,为了统一体验,简化开发,HarmonyOS输入系统会将其他输入设备的输入事件映射到基础事件上。将每种基础事件进一步细化成为基本交互事件与高级交互事件。
- 基本交互事件
基本交互事件对应用户在输入设备上的一个输入动作,由输入系统上报,包括:手指触摸屏幕、手指触摸后移动、手指抬起。
- 高级交互事件
高级交互事件则是多个基本交互事件的组合,包括:单指点击、单指双击、单指长按、单指滑动、单指长按后滑动、双指缩放、双指旋转等。高级交互事件的操作对象是具体的UI控件,需要结合HarmonyOS的UI控件使用。
标准化事件
标准化事件是用于表示用户通用意图的事件,其定义与输入设备的类型无关。标准化事件分为通用标准化事件(CommonEventHandle),媒体类标准化事件(MediaEventHandle),系统类标准化事件(SystemEventHandle),通话类标准化事件(TelephoneEventHandle)。
- 通用标准化事件
提供标准公共事件的处理方法。常见事件包括显示菜单、发送、复制、粘贴、剪切、撤销、刷新、启动拖拽、取消、确认、转到上一个或下一个元素、打印和返回。
表1 通用标准化事件 场景
方法
键盘
鼠标
遥控器
表冠/旋钮
耳机
显示菜单
boolean onShowMenu(MultimodalEvent multimodalEvent)
Shift+F10
Menu键
右键单击
菜单键
不支持
不支持
发送
boolean onSend(MultimodalEvent multimodalEvent)
Enter
不支持
确认键
不支持
不支持
复制
boolean onCopy(MultimodalEvent multimodalEvent)
Ctrl+C
不支持
不支持
不支持
不支持
粘贴
boolean onPaste(MultimodalEvent multimodalEvent)
Ctrl+V
不支持
不支持
不支持
不支持
剪切
boolean onCut(MultimodalEvent multimodalEvent)
Ctrl+X
不支持
不支持
不支持
不支持
撤销
boolean onUndo(MultimodalEvent multimodalEvent)
Ctrl+Z
不支持
不支持
不支持
不支持
刷新
boolean onRefresh(MultimodalEvent multimodalEvent)
F5
Ctrl+R
不支持
不支持
不支持
不支持
启动拖拽
boolean onStartDrag(MultimodalEvent multimodalEvent)
不支持
左键短按
不支持
不支持
不支持
取消
boolean onCancel(MultimodalEvent multimodalEvent)
Esc
不支持
不支持
不支持
不支持
确定/进入
boolean onEnter(MultimodalEvent multimodalEvent)
Enter
不支持
确认键
不支持
不支持
下一个/上一个 / 翻页
boolean onPrevious(MultimodalEvent multimodalEvent)/
boolean onNext(MultimodalEvent multimodalEvent)
PageUp
PageDown
上下左右方向键
滑动滚轮
上下左右方向键
旋转表冠
双击/三击
打印
boolean onPrint(MultimodalEvent multimodalEvent)
Ctrl+P
不支持
不支持
不支持
不支持
Back/上一级
boolean onBack(MultimodalEvent multimodalEvent)
ESC
某键(中键)单击
Back键
不支持
不支持
- 媒体类标准化事件
表2 媒体类标准化事件 场景
方法
键盘
鼠标
遥控器
表冠/旋钮
耳机
暂停/播放
boolean onPlay(MultimodalEvent multimodalEvent)
Space空格键
不支持
确认键
不支持
单击
boolean onPause(MultimodalEvent multimodalEvent)/boolean onMediaControl(MultimodalEvent multimodalEvent)
- 系统类标准化事件
提供处理标准系统事件的方法。标准系统事件包括关闭页面和静音。
表3 系统类标准化事件 场景
方法
键盘
鼠标
遥控器
表冠/旋钮
耳机
关闭界面
boolean onClosePage(MultimodalEvent multimodalEvent)
Alt+F4
Ctrl+W
不支持
返回键
不支持
不支持
静音
boolean onMute(MultimodalEvent multimodalEvent)
静音键
不支持
不支持
不支持
不支持
- 通话类标准化事件
提供处理标准呼叫事件的方法。呼叫事件包括应答、拒绝和挂断呼叫。
表4 通话类标准化事件 场景
方法
键盘
鼠标
遥控器
表冠/旋钮
耳机
接听
boolean onAnswer(MultimodalEvent multimodalEvent)
不支持
不支持
不支持
不支持
单击/长按
拒接
boolean onRefuse(MultimodalEvent multimodalEvent)
不支持
不支持
不支持
不支持
单击/长按
挂断
boolean onHangup(MultimodalEvent multimodalEvent)
不支持
不支持
不支持
不支持
单击/长按
除了以上标准化事件外,为了提供完整的事件处理能力,多模输入提供按键和触屏事件的回调接口类KeyEventHandle和TouchEventHandle。其处理逻辑为:
- 在收到按键、触屏等原始输入事件时,会优先判断是否需要映射为通用标准化事件(CommonEventHandle),媒体类标准化事件(MediaEventHandle),系统类标准化事件(SystemEventHandle),通话类标准化事件(TelephoneEventHandle)。如果注册了以上四种标准化事件中的一种,且原始输入事件满足该标准事件中某一场景,就会执行该标准化事件提供的回调。
- 如果不需要映射为上述四种标准化事件,则会继续判断是否需要映射为按键标准化事件(KeyEventHandle)和触摸标准化事件(TouchEventHandle)。只要注册了这两种标准化事件,分别执行这两种标准化事件中对应的回调。
- 如果没有注册标准化事件,或者传统输入事件没有对应的标准化事件,则会由Ability继续分发给传统输入事件。
开发者可以根据自己的需求选择是否使用标准化事件。如果标准化事件不能满足需求时,建议使用Java UI框架提供的监听事件进行开发。
不建议开发者同时使用标准化事件、Java UI框架提供的监听事件进行开发,避免增加开发难度。