HarmonyOS 鸿蒙Next中通过easyGo兼容方案配置实现平行视界
HarmonyOS 鸿蒙Next中通过easyGo兼容方案配置实现平行视界
概述
平行视界是针对应用在未适配分栏布局的场景下,通过标准化配置实现宽屏、大屏设备分栏显示的系统级兼容方案。开启平行视界并分栏显示时,应用会在一个窗口中同时显示两个页面,默认情况下,两页按1:1平分窗口。左侧固定为主页,页面路由的跳转只发生在右侧,右侧显示跳转后的详情类页面。API 23版本后,支持开发者自配置。
平行视界适用于办公、邮箱、IM、电商等需要频繁切换页面的应用。例如购物类应用,在平板上运行时,左侧主页(商品分类页)保持不变,右侧展示所选分类的商品或具体商品详情,后续相关操作均在右侧进行。
本文面向中高级开发者,在开始学习之前,请完成以下前置操作:
- 环境要求:安装最新版DevEco Studio,需支持API 23版本。
- 知识储备:了解HarmonyOS开发基础,掌握分栏布局、路由跳转等相关知识。
本文主要内容如下:
- 开发步骤:针对API 23及以上版本,详细介绍平行视界的完整适配流程。
- 配置内容说明:深入讲解平行视界核心配置文件中各关键参数的含义、取值范围及配置规则,为开发者提供清晰、规范的配置指引。
- 典型开发场景:以Navigation路由实现的购物类应用为载体,围绕平行视界高频应用场景,提供可复用的场景化解决方案。
- 常见问题:梳理平行视界开发中的高频问题,剖析问题产生的核心原因,并给出解决方案及避坑建议,帮助开发者高效解决实战中的各项问题。
开发步骤
-
增加配置文件
在profile目录下创建easy_go.json兼容方案的配置文件。在module.json5配置文件中添加easyGo字段,并指向引用的easy_go.json配置文件。当前仅支持在entry模块下配置,配置后应用级生效。

-
在easy_go.json配置文件中,配置平行视界的相关属性,详情可参考配置内容说明。
配置内容说明
easy_go.json 是一个标准的Object类型json文件,整体结构分为两层。第一层配置设备类型;第二层配置对应设备类型下的显示模式。
设备类型
一层配置,设置平行视界在不同设备类型下的表现。
{
"common": {},
"phone": {},
"tablet": {}
}
| 枚举值 | 说明 | 可选 |
|---|---|---|
| common | 通用设备配置,为所有设配类型提供基础默认配置 | 否 |
| phone | phone类型上生效的配置,配置后会和common配置合并生效,且优先级高于common | 是 |
| tablet | tablet类型设备上生效的配置,配置后会和common配置合并生效,且优先级高于common 说明: 自由多窗模式下,暂不支持平行视界 |
是 |
显示模式
二层配置displayModeOptions字段,设置平行视界的显示模式,内部字段说明如下:
| 字段名 | 说明 | 可选 |
|---|---|---|
| wideWindowMode | 控制如何在比直板机宽的长方形窗口(>= 600vp,高/宽 <= 1.2)显示的选项 | 否 |
| squareWindowMode | 控制如何在比直板机宽的方形窗口(>= 600vp,高/宽 <= 1.2,宽/高 <= 1.2)显示的选项 | 是 |
| routerSplitOptions | 平行视界使用Router分栏时的配置 | 是 |
| navigationSplitOptions | 平行视界使用Navigation分栏时的配置 | 是 |
wideWindowMode/squareWindowMode内部字段说明:
| 枚举值 | 说明 |
|---|---|
| navigationSplit | 代表应用路由由navigation组件实现,必须配合navigationSplitOptions字段一起使用 |
| routerSplit | 代表应用路由由router模块实现,必须配合routerSplitOptions字段一起使用 |
| original | 关闭窗口显示模式的所有兼容运行行为 |
routerSplitOptions/navigationSplitOptions内部可包含的字段说明:
| 字段名 | 说明 | 数据类型 | 可选 |
|---|---|---|---|
| homePage | 主页名称,不配置时系统采用默认的策略进行主页识别 说明: 对于Navigation路由,如果将NavDestination做为主页,则配置为NavDestination的name;如果将Navigation首页作为主页,则配置为"navBar"。建议将Navigation实际主页配置为homePage。 对于Router路由,配置为页面绝对路径,由配置文件中pages列表提供,例如"pages/index"。 |
string | 是 |
| relatedPage | 关联页名称,不配置时没有关联页能力 说明: • 内容的格式和homePage保持一致。 • 必须有homePage才能配置relatedPage。 • 不支持传递参数,建议配置无需动态参数的静态页面作为关联页。 |
string | 是 |
| enableReducedContainerSize | 是否开启虚拟容器能力,默认值为false - false:lpx单位、页面中横向断点、窗口宽度尺寸和屏幕宽度尺寸将使用原始尺寸进行计算。 - true: lpx单位、页面中横向断点、窗口宽度尺寸和屏幕宽度尺寸将使用原始尺寸的缩小比例,默认按照真实大小的一半计算。 说明: • 开启后在平行视界分栏时,整个应用内生效。 • 平行视界退出分栏时(如:进入全屏页)自动失效。 |
boolean | 是 |
| fullScreenPages | 支持全屏显示的页面数组,跳转到数组中的页面时,退出分栏显示。 说明: 数组中每一项内容的格式和homePage保持一致,且不能和homePage,relatedPage重复。 |
string[] | 是 |
| supportLandscapeFullScreen | 应用主动请求横屏时是否全屏显示,默认值为true - true: 当应用主动请求横屏时,会退出分栏全屏显示。 - false: 当应用主动请求横屏时,仍然保持平行视界效果。 |
boolean | 是 |
navigationSplitOptions中可额外包含如下几个字段:
| 字段名 | 说明 | 数据类型 | 可选 |
|---|---|---|---|
| homeNavigationId | 分栏Navigation的id(组件通用属性),不配置时使用最外层Navigation进行分栏。推荐开发者配置为做全局路由的Navigation的id,如果配置为其他Navigation,可能会导致布局异常。 | string | 是 |
| disablePlaceholder | 是否隐藏占位页,默认值为false | boolean | 是 |
| disableDivider | 是否隐藏分割线,默认值为false | boolean | 是 |
说明:
- routerSplitOptions和navigationSplitOptions不能同时存在。开启平行视界后,混用Router和Navigation会导致部分行为异常,因此不建议在启用平行视界的应用中混用两种路由框架。
- 当wideWindowMode/squareWindowMode配置为routerSplit时,必须同时设置routerSplitOptions字段;配置为navigationSplit时,必须同时设置navigationSplitOptions字段。
配置示例
-
Router路由下,为通用设备配置平行视界效果。
{ "common": { "displayModeOptions": { "wideWindowMode": "routerSplit", "squareWindowMode": "routerSplit", "routerSplitOptions": { "homePage": "pages/Index", "relatedPage": "pages/CategoryPage", "fullScreenPages": [ "pages/FullScreenImagePage" ], "supportLandscapeFullscreen": true, "enableReducedContainerSize": true } } } } -
Navigation路由下,为通用设备配置平行视界效果。
{ "common": { "displayModeOptions": { "wideWindowMode": "navigationSplit", "squareWindowMode": "navigationSplit", "navigationSplitOptions": { "homePage": "navBar", "relatedPage": "CategoryPage", "fullScreenPages": [ "FullScreenImagePage" ], "supportLandscapeFullscreen": true, "enableReducedContainerSize": true } } } } -
以Navigation路由为例,为tablet设备单独配置平行视界效果。
{ "common": { "displayModeOptions": { "wideWindowMode": "navigationSplit", "squareWindowMode": "navigationSplit", "navigationSplitOptions": { "homePage": "CategoryPage", "fullScreenPages": [ "FullScreenImagePage" ], "supportLandscapeFullscreen": true, "enableReducedContainerSize": false } } }, "tablet": { "displayModeOptions": { "wideWindowMode": "original", "squareWindowMode": "original" } } }
典型开发场景
本章以Navigation路由实现的购物类应用为载体,介绍平行视界适配开发中的四个典型场景,并讲解如何通过easy_go配置文件进行配置。
配置主页与关联页
场景描述
默认情况下,系统会将应用的某个页面识别为主页,但是该机制在有些场景下不能准确识别主页。建议开发者主动配置主页,需要的话,还可以配置关联页。
例如在购物类应用中,开发者可以将首页设置为主页,首个商品分类页设置为启动关联页。
| 场景 | 同时配置主页和关联页 | 只配置主页 |
|---|---|---|
| 效果图 | ![]() |
![]() |
开发步骤
在easy_go.json配置文件中,将homePage属性设置为"navBar",表示将Navigation首页设置为主页。将relatedPage字段设置为"CategoryPage",表示将分类页设置为关联页。具体配置文件如下:
{
"common": {
"displayModeOptions": {
"wideWindowMode": "navigationSplit",
"navigationSplitOptions": {
"homePage": "navBar",
"relatedPage": "CategoryPage"
}
}
}
}
路由跳转过程请求全屏
场景描述
在商品详情页,为清晰呈现商品细节,点击商品图片后,需将图片全屏展示。
实现原理
平行视界提供了全屏页能力,支持通过fullScreenPages字段指定全屏页。配置后,对应页面展示时,将暂时退出分栏模式,切换为全屏显示。页面隐藏时,恢复分栏显示。
开发步骤
在平行视界配置文件的fullScreenPages字段中,加入图片浏览页。
{
"common": {
"displayModeOptions": {
...
"fullScreenPages": [
"FullScreenImagePage"
],
}
}
}
路由跳转过程请求横屏显示
场景描述
在商品详情页中,“参数对比”、“配置表”类图片往往需要横屏展示,以解决竖屏模式下文字过小等问题。
实现原理
平行视界提供了配置应用请求横屏之后,退出平行视界并全屏显示的能力,支持配置supportLandscapeFullScreen字段,配置后,当应用请求全屏时,会退出分栏,全屏显示页面。
开发步骤
在easy_go.json配置文件中,将supportLandscapeFullScreen属性设置为true,配置后,当页面申请横屏时,将退出分栏模式,切换为全屏显示。
{
"common": {
"displayModeOptions": {
...
"supportLandscapeFullScreen": true
}
}
}
开启虚拟容器能力
场景描述
在开启平行视界并分栏显示时,一个窗口内部会同时显示两个页面,两个页面默认按照1:1平分窗口大小。如果页面内的元素布局使用窗口宽度,可能会导致UI元素超出页面范围被截断,开发者可以开启虚拟容器能力,此时lpx单位、页面中横向断点、窗口宽度尺寸将使用原始尺寸的一半进行计算。
开发步骤
在平行视界配置文件中,将enableReducedContainerSize属性设置为true,获取平行视界后的断点。
{
"common": {
"displayModeOptions": {
...
"enableReducedContainerSize": true
}
}
}
常见问题
UI元素超出页面范围,页面被截断
问题描述
开启平行视界并分栏显示时,页面内的元素超出页面范围,导致被截断,如下图所示:

原因分析
在开启平行视界并分栏显示时,一个窗口内部会同时显示两个页面,两个页面默认按照1:1平分窗口大小。如果页面内的元素布局使用窗口宽度,可能会导致UI元素超出页面范围。
解决方案
建议采取以下策略:
- 优先使用系统组件的自适应布局能力:自适应布局。
- 开启虚拟容器能力,在平行视界配置文件中,将enableReducedContainerSize设置为true。此时,lpx单位、页面中横向断点、窗口宽度尺寸和屏幕宽度尺寸将使用原始尺寸的一半进行计算。
- 使用页面大小获取接口和无感监听能力: on(‘navDestinationUpdate’):监听NavDestination组件的状态变化,API 23版本及以上,返回的当前NavDestination组件状态中会包含NavDestination组件的大小。 on(‘routerPageUpdate’):监听Router中page页面的状态变化,API 23版本及以上,返回的当前Router页面的信息中会包含routerPage页面的大小。 onRouterPageSizeChange:当可见的Router页面大小发生变化时,会触发该回调函数。 onNavDestinationSizeChange:当可见的NavDestination大小发生变化时,会触发该回调函数。
避免左右两个页面公用一个UI资源
问题描述
左右两个分栏页面中,同一资源只在一页面中显示。
原因分析
如果左右两个分栏页面利用ArkUI的组件复用机制(例如:NodeContainer)共用了同一个UI资源,会导致对应的资源同一时刻只能在一个页面中显示。
解决方案
建议改为两边页面使用独立的资源,互不影响。
页面横竖屏适配
问题描述
平行视界场景下,使用NavDestination页面级横竖屏设置接口时,未生效。
原因分析
平行视界场景下,会同时显示左右两个页面,两个页面方向需要一致。
解决方案
推荐使用window的接口设置窗口策略。
更多关于HarmonyOS 鸿蒙Next中通过easyGo兼容方案配置实现平行视界的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS Next的easyGo兼容方案通过配置应用适配平行视界。开发者需在应用的config.json文件中声明支持的分屏模式,并设置布局属性。系统会根据配置自动调整UI组件,实现分屏显示。具体配置涉及声明式UI的调整,确保组件在不同分屏比例下正确响应。
在HarmonyOS Next中,通过easyGo兼容方案实现平行视界,主要依赖配置文件easy_go.json进行标准化适配。以下是关键步骤和配置要点:
-
创建配置文件:在entry模块的
profile目录下创建easy_go.json文件,并在module.json5中通过easyGo字段引用。 -
配置设备类型:配置文件支持
common(通用设备)、phone(手机)、tablet(平板)三层结构。common为必填基础配置,phone和tablet可覆盖common设置。 -
设置显示模式:在
displayModeOptions中配置wideWindowMode(宽窗口模式)和squareWindowMode(方形窗口模式),可选值包括:navigationSplit:使用Navigation路由分栏,需配合navigationSplitOptions。routerSplit:使用Router路由分栏,需配合routerSplitOptions。original:关闭平行视界。
-
分栏参数配置:
- homePage:指定主页名称。Navigation路由可设为
"navBar"或NavDestination的name;Router路由需填写页面绝对路径(如"pages/Index")。 - relatedPage:可选关联页,格式同
homePage。 - fullScreenPages:全屏页面数组,跳转至此列表页面时退出分栏。
- enableReducedContainerSize:设为
true可开启虚拟容器,解决分栏后UI元素截断问题(lpx等单位按一半计算)。 - supportLandscapeFullScreen:控制横屏时是否全屏显示。
- homePage:指定主页名称。Navigation路由可设为
-
Navigation专属配置:
navigationSplitOptions额外支持:- homeNavigationId:指定分栏的Navigation组件id。
- disablePlaceholder:隐藏占位页。
- disableDivider:隐藏分栏分割线。
-
注意事项:
routerSplitOptions与navigationSplitOptions不可同时配置,避免混用路由框架。- 自由多窗模式下暂不支持平行视界。
- 分栏页面应避免共享UI资源(如NodeContainer),防止显示异常。
典型配置示例(Navigation路由):
{
"common": {
"displayModeOptions": {
"wideWindowMode": "navigationSplit",
"navigationSplitOptions": {
"homePage": "navBar",
"relatedPage": "CategoryPage",
"fullScreenPages": ["FullScreenImagePage"],
"enableReducedContainerSize": true
}
}
}
}
通过以上配置,可快速实现应用在平板等宽屏设备上的分栏显示,提升多任务操作体验。



