HarmonyOS-鸿蒙app开发 —多模输入事件标准化概述

HarmonyOS-鸿蒙app开发 —多模输入事件标准化概述

概述

随着用户输入的多样化发展,一个应用程序需要响应多种输入事件,以支持用户使用不同的输入设备(方式)与其进行交互(例如使用遥控器、语音等同时操控智慧屏)。同时,开发者针对同一输入动作的处理,存在不同的设计,这就给用户造成了体验上的差异。

多模输入在已支持的输入事件的基础上,将用户常用的一些输入动作定义为一组标准化事件,将不同输入设备的输入事件映射到标准化事件上。使用户在使用多种输入设备操作不同的终端设备或应用时,能够得到统一的体验。

输入事件类型

输入事件,即用户为了控制终端设备,通过输入设备做出的一个或一组输入动作。HarmonyOS的输入系统将事件分为原始事件、基础事件、标准化事件。

原始事件

原始事件,即由输入设备产生的、未经过任何含义转换的输入事件,用于表示用户在输入设备上操作时所做出的原始输入动作。

基础事件

将手指在触屏上操作产生的原始事件定义为基础事件,为了统一体验,简化开发,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。其处理逻辑为:

  1. 在收到按键、触屏等原始输入事件时,会优先判断是否需要映射为通用标准化事件(CommonEventHandle),媒体类标准化事件(MediaEventHandle),系统类标准化事件(SystemEventHandle),通话类标准化事件(TelephoneEventHandle)。如果注册了以上四种标准化事件中的一种,且原始输入事件满足该标准事件中某一场景,就会执行该标准化事件提供的回调。
  2. 如果不需要映射为上述四种标准化事件,则会继续判断是否需要映射为按键标准化事件(KeyEventHandle)和触摸标准化事件(TouchEventHandle)。只要注册了这两种标准化事件,分别执行这两种标准化事件中对应的回调。
  3. 如果没有注册标准化事件,或者传统输入事件没有对应的标准化事件,则会由Ability继续分发给传统输入事件。

开发者可以根据自己的需求选择是否使用标准化事件。如果标准化事件不能满足需求时,建议使用Java UI框架提供的监听事件进行开发。

说明

不建议开发者同时使用标准化事件、Java UI框架提供的监听事件进行开发,避免增加开发难度。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com