华为EMUI10.1的智慧分屏功能,多任务处理+应用分屏+悬浮窗口的设计让用户在操做时绝不费力,优化了人与机器的智慧交互体验,帮助用户大幅提高工做效率。如何让本身的应用快速适配,第一时间抢占新的应用入口呢?javascript
在本文中,华为技术专家朱登奎将从五个维度为你们分享华为EMUI多窗口模式适配指南。css
华为 朱登奎html
朱登奎,华为CBG软件部高级研发工程师,从事Android Framework开发工做近10年,目前负责华为多屏多窗口方案设计工做。java
华为智慧分屏功能介绍
android
1.1 分屏功能演示微信
在EMUI10.1中智慧分屏功能已经默认开启,用户也能够经过设置-辅助功能-智慧分屏路径进行开启和关闭。智慧分屏功能开启后,能够经过侧边栏划出应用多窗口dock,进行分屏、悬浮、窗口拖拽等操做,带来了极大的便利。app
1.2 智慧分屏创新点ide
华为智慧分屏,在安卓原生的分屏功能基础上,进行了一系列的优化:布局
(1)收编原有分屏入口,提供统一的多窗口启动入口,可快速完成应用的窗口化启动;flex
(2)为IM类应用消息通知提供悬浮窗入口;
(3)在最近任务提供悬浮窗入口;
(4)系统导航(Home、Back、Recent)操做在多窗口和独占模式下实现了体验归一,多窗口模式退到后台之后,能够经过最近任务进行快速切换。

1.3 多窗口能力介绍
华为智慧分屏对多窗口能力进行了从新定义:新增悬浮窗显示应用的能力,并支持在窗口之间进行数据拖拽。

不一样窗口形态(悬浮窗、分屏、全屏)之间还能够实现快速切换。
华为智慧分屏应用适配关键点
不少应用在适配多窗口模式时,因为一些在全屏模式下关注不到的点,致使存在兼容性问题。为此,咱们整理了智慧分屏应用适配的五大关键点,帮助开发者快速适配。
2.1 如何声明支持多窗口
华为智慧分屏多窗口适配方法与安卓原生多窗口适配策略相同,在 <activity> 或 <application> 节点中添加声明,启用多窗口显示,便可加入到侧边栏dock列表中。
多窗口的配置属性方法:
在 <activity> 或 <application> 节点中设置该属性,启用或禁用多窗口显示:
android:resizeableActivity=["true" | "false"]
安卓官方多窗口适配参考连接:
https://developer.android.com/guide/topics/ui/multi-window.html
2.2 正确使用应用资源
开发者在适配多窗口模式时,应使用Activity的Context来加载合适的资源。在应用进程中,存在Application和Activity两类Context,其中Application Contex对应的是屏幕资源信息,而Activity Context对应的是窗口的资源信息。若是在悬浮窗下使用的是 Application Context处理UI 相关的事情,会致使加载的资源没法感知到多窗口而显示异常,而使用Activity Context在全屏模式和投屏等模式下依然能够正常显示。

activity如何获取特定窗口类型下的窗口尺寸,参考代码:
获取dp:
activity.getResources().getConfiguration().screenWidthDpactivity.getResources().getConfiguration().screenHeightDp
获取px:
activity.getResources().getDisplayMetrics().widthPixelsactivity.getResources().getDisplayMetrics().heightPixelsactivity.getWindowManager().getDefaultDisplay().getMetrics(dm);activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm); activity.getWindowManager().getDefaultDisplay().getRealSize(point);
在应用横竖屏旋转和窗口大小变化时,Activity (和 Fragment) 将收到 onConfigurationChanged()方法回调,而不是先销毁再重建,在管理视图更新,从新加载资源等工做时需注意不要沿用以前的Config信息,应从新获取最新资源信息。
参考代码:
<activity android:name=".MyActivity" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
在华为智慧分屏或者多窗口模式下,在应用顶部有一个功能bar,所以应用在布局时,须要调用安卓原生的WindowInsetsListener接口在顶部预留必定的空间,注意不要使用固定高度。

参考代码:
View#setOnApplyWindowInsetsListenervoid setOnApplyWindowInsetsListener(View.OnApplyWindowInsetsListener listener)View#onApplyWindowInsetsWindowInsets onApplyWindowInsets(WindowInsets insets)
针对分屏和多窗口模式下的一些创新功能,华为SDK还提供了一些专门的接口,来帮助应用实现快速适配,具体接口和描述以下表所示.

其中getActivityWindowMode(Activity activity)接口能够用来判断应用处于何种窗口类型,onMultiWindowModeChanged接口能够在全屏和分屏切换时应用新的资源信息,startActivityOneStepWindow接口能够支持在应用内开启悬浮窗, 从而得到更好的大屏体验。
随着移动终端设备的屏幕尺寸愈来愈大,多窗口模式势必成为应用显示的一种重要形式,侧边栏Dock也会成为重要的手机应用入口之一,但愿更多的应用适配多窗口模式,带来更好的大屏体验。
· END ·
往 期 精 选 文 章 回 顾

折叠屏+视频类App:一键全屏,沉浸式观影体验感UPUPUP!

泰尔实验室联合软件绿色联盟创新智能电视生态,现征募长期合做伙伴

折叠屏丨华为专家深度解读折叠屏连续性和拖拽适配介绍

本文分享自微信公众号 - 软件绿色联盟(sgachina)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。