前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >华为EMUI多窗口模式适配指南

华为EMUI多窗口模式适配指南

作者头像
软件绿色联盟
发布2022-03-31 15:43:31
1.4K0
发布2022-03-31 15:43:31
举报

华为EMUI10.1的智慧分屏功能,多任务处理+应用分屏+悬浮窗口的设计让用户在操作时毫不费力,优化了人与机器的智慧交互体验,帮助用户大幅提升工作效率。如何让自己的应用快速适配,第一时间抢占新的应用入口呢?

在本文中,华为技术专家朱登奎将从五个维度为大家分享华为EMUI多窗口模式适配指南。

华为智慧分屏功能介绍

1.1 分屏功能演示

在EMUI10.1中智慧分屏功能已经默认开启,用户也可以通过设置-辅助功能-智慧分屏路径进行开启和关闭。智慧分屏功能开启后,可以通过侧边栏划出应用多窗口dock,进行分屏、悬浮、窗口拖拽等操作,带来了极大的便利。

1.2 智慧分屏创新点

华为智慧分屏,在安卓原生的分屏功能基础上,进行了一系列的优化:

(1)收编原有分屏入口,提供统一的多窗口启动入口,可快速完成应用的窗口化启动;

(2)为IM类应用消息通知提供悬浮窗入口;

(3)在最近任务提供悬浮窗入口;

(4)系统导航(Home、Back、Recent)操作在多窗口和独占模式下实现了体验归一,多窗口模式退到后台以后,可以通过最近任务进行快速切换。

1.3 多窗口能力介绍

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

不同窗口形态(悬浮窗、分屏、全屏)之间还可以实现快速切换。

华为智慧分屏应用适配关键点

很多应用在适配多窗口模式时,由于一些在全屏模式下关注不到的点,导致存在兼容性问题。为此,我们整理了智慧分屏应用适配的五大关键点,帮助开发者快速适配。

2.1 如何声明支持多窗口

华为智慧分屏多窗口适配方法与安卓原生多窗口适配策略相同,在 <activity> 或 <application> 节点中添加声明,启用多窗口显示,即可加入到侧边栏dock列表中。

多窗口的配置属性方法:

在 <activity> 或 <application> 节点中设置该属性,启用或禁用多窗口显示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
activity.getResources().getConfiguration().screenWidthDp
activity.getResources().getConfiguration().screenHeightDp

获取px:

代码语言:javascript
复制
activity.getResources().getDisplayMetrics().widthPixels
activity.getResources().getDisplayMetrics().heightPixels
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm); 
activity.getWindowManager().getDefaultDisplay().getRealSize(point);

2.3 正确处理Configuration变化

在应用横竖屏旋转和窗口大小变化时,Activity (和 Fragment) 将收到 onConfigurationChanged()方法回调,而不是先销毁再重建,在管理视图更新,重新加载资源等工作时需注意不要沿用之前的Config信息,应重新获取最新资源信息。

参考代码:

代码语言:javascript
复制
<activity
 android:name=".MyActivity"
 android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
/>

2.4 正确处理多窗口下的沉浸式

在华为智慧分屏或者多窗口模式下,在应用顶部有一个功能bar,因此应用在布局时,需要调用安卓原生的WindowInsetsListener接口在顶部预留一定的空间,注意不要使用固定高度。

参考代码:

代码语言:javascript
复制
View#setOnApplyWindowInsetsListener
void setOnApplyWindowInsetsListener(View.OnApplyWindowInsetsListener listener)
View#onApplyWindowInsets
WindowInsets onApplyWindowInsets(WindowInsets insets)

2.5 华为SDK接口的使用

针对分屏和多窗口模式下的一些创新功能,华为SDK还提供了一些专门的接口,来帮助应用实现快速适配,具体接口和描述如下表所示.

其中getActivityWindowMode(Activity activity)接口可以用来判断应用处于何种窗口类型,onMultiWindowModeChanged接口可以在全屏和分屏切换时应用新的资源信息,startActivityOneStepWindow接口可以支持在应用内开启悬浮窗, 从而获得更好的大屏体验。

随着移动终端设备的屏幕尺寸越来越大,多窗口模式势必成为应用显示的一种重要形式,侧边栏Dock也会成为重要的手机应用入口之一,希望更多的应用适配多窗口模式,带来更好的大屏体验。

· END ·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件绿色联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档