隔空传送、统一拖拽:鸿蒙开发者如何用API"玩转"跨设备交互?

隔空传送、统一拖拽:鸿蒙开发者如何用API

最近,我和几位开发者朋友聊了聊为什么要做鸿蒙应用。他们说,主要是鸿蒙有很多特色能力,比如有创新的交互、多设备适配、跨设备流转等等。而且,鸿蒙不仅允许系统应用使用这些能力,而且将这些能力通过 API 开放给了第三方应用, 这就可以探索出非常多的功能玩法了。

就比如说隔空传送吧,最早是在 Mate 70 系列上优先发布,很快就作为系统级 API 开放给了第三方应用。就拿我朋友做的来一杯吧 APP 举例,只需要在一部手机上抓取饮品,再在另一部手机上松手,就能直接把饮品分享给其他设备了,这种创新的交互非常有趣,而且还能促进应用的传播。

那这么炫酷的功能是怎么做的呢?其实很简单,先构造分享数据,然后注册对应的事件就行了。

当进入可分享页面时,注册隔空传送监听事件,当离开可分享页面(包括应用退至后台等场景)时,取消隔空传送监听事件就行了。

而且,其实隔空传送和碰一碰分享是非常类似的,可以封装在一起。这样,在一个可分享的页面,既能够隔空传送,也能够碰一碰分享。

我听到几个开发者反馈,用户在使用分享功能中,遇到最多的问题是, 不知道这个页面可以这样分享,为了让用户了解这个功能,来一杯吧的开发者在应用中加了一个友善的提示,从而来提升功能的使用率。甚至还附上了跳转到对应设置的连接,我觉得这一点设计得很不错。

鸿蒙还有一个有趣的特性,就是 统一拖拽。鸿蒙把所有的数据用 Ark Data 进行了格式统一,无论是文本、图片、链接还是文件。都可以使用 Ark Data 进行表示。有了“书同文,车同轨”,数据就可以在不同设备的不同应用之间无缝流动了。作为开发者, 只需要管理拖出时给出数据和拖入时接收数据,至于数据是从哪个设备的哪个应用来的,完全不用关心,系统已经把路铺平了。

鸿蒙很多组件本身适配了统一拖拽,比如Search、TextInput、TextArea、RichEditor、Text、Image、Hyperlink这些组件,打开可拖出属性就能拖出内容,不需要额外适配。

对于其他的组件,把组件的 draggable 设置为true,然后实现 onDragStart (开始拖出)接口,即可支持拖出。实现onDrop (放入)接口,即可支持拖入和拖出操作。

我之前问过一些鸿蒙开发者,鸿蒙最核心的能力是什么,我听到最多的答案就是 一次开发、多端部署。可以说, 一次开发、多端部署是鸿蒙生态动力的源泉之一。为什么这么说呢?因为一次开发、多端部署, 只需要开发时多付出 20%~30% 的努力,就能适配大大小小不同屏幕尺寸的鸿蒙设备。 这就让鸿蒙应用像水一样,流进各种各样的设备。创新形态的 PuraX、MateXTs、MatePad Edge、Matebook Fold 等设备,像是下饺子一样不停地推出,而应用却几乎不用额外适配。

比如说做得比较好的便单,就适配了手表、小折叠、阔折叠、直板机、双折叠、三折叠、平板、电脑等多种设备,而且都能获得非常好的交互体验:

一次开发能适配这么多设备,在过去是完全不可想象的,但是鸿蒙提供了大量的能力,帮助开发者实现一次开发多端部署。

首先是 UI 的适配,鸿蒙为多设备开发提供了两套机制,一个是自适应布局,一个是响应式布局。

自适应布局就当外部容器大小发生变化时,元素可以根据相对关系自动变化以适应外部容器变化的布局能力。当前自适应布局能力有7种:拉伸能力、均分能力、占比能力、缩放能力、延伸能力、隐藏能力、折行能力,可以实现界面显示随外部容器大小连续变化。比如说利用隐藏能力,播放控件能够根据控件大小,显示优先级最高的按钮。

而响应式布局就是当外部容器大小发生变化时,元素可以根据断点、栅格或特定的特征(如屏幕方向、窗口宽高等)自动变化以适应外部容器变化的布局能力。可实现界面随外部容器大小的不连续变化,通常在不同特征下界面显示会有较大差异。像是华为视频,就能利用响应式布局,在小、中、大屏幕上,改变每行的视频显示数量,同时,改变导航栏的位置。

然后是交互的适配。鸿蒙能够部署到各种各样形态的设备上,而这些设备可能有数十种交互方式,如果开发者要逐一适配,那必然是地狱级的难度。

鸿蒙为了解决这个问题,对交互事件做了归一处理,让应用只需要适配一个事件,就能支持多种设备不同的交互,开发效率大大提升。

就比如说打开菜单,用鼠标就是右键,用触控板是双指单击,用手指是长按。但是在很多平板上,用鼠标也是长按,用触控板也是长按,这根本不符合交互逻辑。 而鸿蒙应用,只需要接入一个 ContextMenu 就适配了多种交互方式。

在其他系统上,应用想要适配一个缩放操作,就需要对各个设备的输入操作逐个实现,至少要适配手指、Crtl+滚轮、Ctrl +/-、触控板双指捏合四个事件,非常麻烦。

而鸿蒙开发中,这些复杂的输入 全部转化为了一个缩放事件,开发者无需关注背后的具体输入方式,这大大简化了开发流程,提升了开发效率。

通过交互归一,鸿蒙应用可以用非常低的成本,在不同设备上,始终为用户提供舒适的交互体验。

除了我上面介绍的,鸿蒙提供了非常多有趣的创新能力,可以在华为开发者官网学习。开发鸿蒙应用,肯定不能“穿新鞋,走老路”,就应该把这些鸿蒙特性利用好,为用户提供独特的体验。

请使用浏览器的分享功能分享到微信等