折叠屏丨华为高级工程师权威解读平行视界开发指南

2022-03-31 15:49:06 浏览数 (1)

平行视界简介

平行视界以Activity为基本单位以左右窗口分离显示技术、双窗口生命周期管理、双窗口显示模式和切换逻辑为核心技术的实现应用内分屏的系统侧解决方案。应用可以根据自身业务设计分屏显示Activity组合,以实现符合应用逻辑的最佳单应用多窗口用户体验,且支持一次开发,多端部署。

一个手机版本可以通过平行视界支持多个华为设备。以往针对普通手机、平板、折叠屏手机这三款产品,因为屏幕尺寸大小有差异化,一个App需要同时开发和维护三个版本,导致工作量和成本都很大。现在只需要在手机版本的基础上,通过平行视界适配一个版本即可。

平行视界可以大幅提升用户体验。传统浏览方式VS平行视界浏览方式:

传统浏览方式

用户操作:点击会话1→→输入→→返回→→点击会话2→→输入→→返回→→…

平行视界浏览方式

用户操作:在左屏,点击会话1→→切换会话2→→…

优势:可有效减少全屏页面切换给用户带来的不连续性,提高操作效率。

典型场景与案例分享

除消息聊天外,还适用于哪些场景呢?

1.列表 浏览

2.商详 客服

3.商品对比

4.列表 聊天

下面是与京东的案例分享。

商品详情快切,可减少页面跳转感,使商品查找更加高效。

商品对比,一目了然,可避免传统不同页面间跳转对比,使商品对比更精准。

改变以往客服页面独占式的布局,给用户带来更轻量的多任务体验。

基础适配

看到这么酷炫的效果,那你的App如何实现平行视界呢,会不会很复杂?答案是并不会。只需要两步配置即可完成。

STEP 1

AndroidManifest.xml 新增 meta-data申明

代码语言:javascript复制
<meta-data
 android:name="EasyGoClient“
 android:value="true" />

STEP 2

assets目录下新加配置文件easygo.json

代码语言:javascript复制
{
  "easyGoVersion": "1.0", //Version number "client": 
  "client": "com.example.myapplication",
  …
   "body": {
        “mode”:“1”,// 1:导航模式;0:购物模式
        "activityPairs":[
          {"from":"com. myapplication.MainActivity","to":"*"}
        ],
     …
    }
  ]
}

这里提个建议,配置文件最好去官网示例代码页面下载现成的模板。之前遇到过很多配置文件字段、格式不正确而导致不生效的问题,浪费时间。接下来是重点参数的介绍。

在上图中,什么是过渡页面?比如,App中用户在Activity A页面点击打开Activity C,正常启动方式是在Activity A中start Activity C ,有时由于某些特殊的原因需要先打开Activity B,Activity B中打开Activity C,Activity B自行finish,Activity B就叫过渡页面。如果没有这个参数会发生闪屏。闪一下Activity B再出来Activity C,体验效果不佳。配置上Activity B,系统就会帮助开发者处理这种问题。

分屏模式的配置样例

下面是购物模式与自定义模式在页面跳转上的区别:

需要注意的是:左右分屏的返回是不一样的,注意左图中的蓝色虚线,左屏C的返回会把B和C都销毁,左屏C的返回只是销毁C。

APP Multiplier – FAQ

问题1. 配置好了如果不生效如何排查?

1. 排查easygo.json配置文件的格式是否正确,能否正确解析,路径是否正确,建议复制模板内容,不要修改参数名称;

2. 设置菜单中该应用的平行视界开关是否开启;

3. 折叠屏是设备竖屏方向生效,平板是设备横屏方向生效。

问题2. 如何判断Activity是否运行在平行视界状态?

可以根据Activity的configuration来判断此Activity是否运行在平行视界模式,代码如下:

代码语言:javascript复制
String config = context.getResources().getConfiguration().toString();
boolean isInMagicWindow = config.contains("hwMultiwindow-magic") || config.contains("hw-magic-windows");

问题3.如何获取Activity实际显示的窗口大小?

获取Activity窗口大小的方法为:

推荐使用:context.getResources().getDisplayMetrics();

不推荐使用:

context.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

上述接口中,context为Activity对应的上下文句柄,每个Activity应该严格使用自己的context来进行布局,而不是使用application的context。

本篇文章的分享只是基础的内容,更加全面具体的内容,可参考:

1. 平行视界开发指南: https://developer.huawei.com/consumer/cn/doc/development/UI-Guides/app-multiplier-introduction

2. 平行视界Demo示例:

https://developer.huawei.com/consumer/cn/codelab/AppMultiplier/index.html

· END ·

0 人点赞