轻松玩转平行视界(下)

系统
平行视界是多窗口交互服务的其中一种,平行视界是以界面为基本单位实现应用内双窗口显示的系统侧解决方案。

[[434410]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

前言

先来回顾一下上一篇文章的easygo.json配置文件的相关元素的描述:【木棉花】轻松玩转平行视界(上)

  1.   "easyGoVersion": 必选,固定值为"1.0"
  2.   "client": 必选,该程序的应用包名, 
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function": 必选,调用组件名,固定值为"magicwindow"
  7.         "required": 必选,预留字段,固定值为"true" 
  8.       }, 
  9.       "body": { 
  10.         "mode": 必选,基础分屏模式."0":购物模式,abilityPairs节点不生效;"1":自定义模式(包含导航模式), 
  11.         "abilityPairs": [自定义模式下必选,配置从from页面到to页面的分屏显示 
  12.           { 
  13.             "from": 自定义模式下必选,AbilityA的包名, 
  14.             "to": 自定义模式下必选,AbilityB的包名, 
  15.           }表示A上启动B,触发分屏(A左B右) 
  16.         ], 
  17.         "Abilities": [可选,应用Page Ability属性列表, 
  18.           { 
  19.             "name": 可选,Page Ability包名, 
  20.             "defaultFullScreen": 可选,Page Ability是否支持默认以全屏启动."true": 支持;,"false": 不支持 
  21.           }, 
  22.           { 
  23.             "name": 可选,Page Ability包名, 
  24.             "defaultFullScreen": 可选,Page Ability是否支持默认以全屏启动."true": 支持;,"false": 不支持 
  25.           } 
  26.         ], 
  27.         "UX": {可选,页面UX控制配置 
  28.           "isDraggable": 可选,是否支持分屏窗口拖动(仅针对平板产品生效)."true": 支持;,"false": 不支持(缺省值为false
  29.         } 
  30.       } 
  31.     } 
  32.   ] 

导航模式

代码文件

代码文件结构如下:

【木棉花】轻松玩转平行视界(下)-鸿蒙HarmonyOS技术社区

下面只给出部分重点代码

FirstAbilitySlice.java:

  1. public class FirstAbilitySlice extends AbilitySlice { 
  2.     @Override 
  3.     public void onStart(Intent intent) { 
  4.         super.onStart(intent); 
  5.         super.setUIContent(ResourceTable.Layout_ability_first); 
  6.  
  7.         findComponentById(ResourceTable.Id_btn_yes).setClickedListener(new Component.ClickedListener() { 
  8.             @Override 
  9.             public void onClick(Component component) { 
  10.                 getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE);//申请横屏方向可进入全屏显示状态 
  11.             } 
  12.         }); 
  13.  
  14.         findComponentById(ResourceTable.Id_btn_no).setClickedListener(new Component.ClickedListener() { 
  15.             @Override 
  16.             public void onClick(Component component) { 
  17.                 getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation. PORTRAIT);//调用申请竖屏方向即可退出全屏状态 
  18.             } 
  19.         }); 
  20.  
  21.         findComponentById(ResourceTable.Id_btn2).setClickedListener(new Component.ClickedListener() { 
  22.             @Override 
  23.             public void onClick(Component component) { 
  24.                 Operation operation = new Intent.OperationBuilder() 
  25.                         .withDeviceId(""
  26.                         .withBundleName(getBundleName()) 
  27.                         .withAbilityName(SecondAbility.class.getName()) 
  28.                         .build(); 
  29.                 intent.setOperation(operation); 
  30.                 startAbility(intent); 
  31.             } 
  32.         }); 
  33.  
  34.         findComponentById(ResourceTable.Id_btn3).setClickedListener(new Component.ClickedListener() { 
  35.             @Override 
  36.             public void onClick(Component component) { 
  37.                 Operation operation = new Intent.OperationBuilder() 
  38.                         .withDeviceId(""
  39.                         .withBundleName(getBundleName()) 
  40.                         .withAbilityName(ThridAbility.class.getName()) 
  41.                         .build(); 
  42.                 intent.setOperation(operation); 
  43.                 startAbility(intent); 
  44.             } 
  45.         }); 
  46.  
  47.         findComponentById(ResourceTable.Id_btn_back).setClickedListener(new Component.ClickedListener() { 
  48.             @Override 
  49.             public void onClick(Component component) { 
  50.                 terminateAbility(); 
  51.             } 
  52.         }); 
  53.     } 
  54.  
  55.     @Override 
  56.     public void onActive() { 
  57.         super.onActive(); 
  58.     } 
  59.  
  60.     @Override 
  61.     public void onForeground(Intent intent) { 
  62.         super.onForeground(intent); 
  63.     } 

config.json配置文件的module对象中新增metaData:

  1. "metaData": { 
  2.       "customizeData": [ 
  3.         { 
  4.         "name""EasyGoClient"
  5.         "value""true" 
  6.         } 
  7.       ] 
  8.     } 

在src -> main -> resources -> rawfile目录下增加easygo.json配置文件:

  1.   "easyGoVersion""1.0"
  2.   "client""com.test.mydemo2"
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function""magicwindow"
  7.         "required""true" 
  8.       }, 
  9.       "body": { 
  10.         "mode""1"
  11.         "abilityPairs": [ 
  12.           { 
  13.             "from""com.test.mydemo2.NavigationAbility"
  14.             "to""*" 
  15.           } 
  16.         ], 
  17.         "Abilities": [ 
  18.           { 
  19.             "name""com.test.mydemo2.MainAbility"
  20.             "defaultFullScreen""false" 
  21.           }, 
  22.           { 
  23.             "name""com.test.mydemo2.NavigationAbility"
  24.             "defaultFullScreen""false" 
  25.           }, 
  26.           { 
  27.             "name""com.test.mydemo2.FirstAbility"
  28.             "defaultFullScreen""false" 
  29.           }, 
  30.           { 
  31.             "name""com.test.mydemo2.SecondAbility"
  32.             "defaultFullScreen""false" 
  33.           }, 
  34.           { 
  35.             "name""com.test.mydemo2.ThridAbility"
  36.             "defaultFullScreen""false" 
  37.           } 
  38.         ], 
  39.         "UX": { 
  40.           "isDraggable""true" 
  41.         } 
  42.       } 
  43.     } 
  44.   ] 

上述代码easygo.json配置文件的相关元素的描述如下:

  1.   "easyGoVersion":  
  2.   "client":  
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function":  
  7.         "required":  
  8.       }, 
  9.       "body": { 
  10.         "mode":  
  11.         "abilityPairs": [ 
  12.           { 
  13.             "from": 自定义模式下必选,AbilityA的包名, 
  14.             "to""*"表示任意Page Ability, 
  15.           }表示A上启动任意Page Ability,触发分屏(A左任意右) 
  16.         ], 
  17.         "Abilities": [ 
  18.           { 
  19.             "name":  
  20.             "defaultFullScreen":  
  21.           } 
  22.         ], 
  23.         "UX": { 
  24.           "isDraggable":  
  25.         } 
  26.       } 
  27.     } 
  28.   ] 

运行效果

平板横屏的运行效果如下:

【木棉花】轻松玩转平行视界(下)-鸿蒙HarmonyOS技术社区

小结

导航模式是一种系统提供的“分栏”,能帮助用户在应用内高效地来回切换。

从上述运行效果可以发现导航模式有三个特点:

1. 右半屏总是最后一个窗口。

2. 左边固定导航主页,左点右出,右点右出。

3. 左边触发的返回,左右分屏中的所有界面都将退出;右边触发的返回,右边回到上一层级,左边保持不变。

全屏显示Page Ability

另外关于平行视界状态下,部分Page Ability希望以全屏来显示,分别有动态方法和静态方法:

动态方法:

全屏显示:调用如下接口申请横屏方向可进入全屏显示状态:

  1. getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE); 

 退出全屏:调用申请竖屏方向即可退出全屏状态:

  1. getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation. PORTRAIT); 

 静态方法:

在easygo.json文件的Abilities属性中,将Page Ability的defaultFullScreen配置为true,即可实现Page Ability默认以全屏显示:

  1.        "name""com.test.mydemo2.MainAbility"
  2.        "defaultFullScreen""true" 
  3.      } 

 在config.json文件的Abilities属性中,将Page Ability的orientation配置为landscape(横屏),Page Ability会一直以全屏状态显示:

  1.         "orientation""landscape"
  2.         "visible"true
  3.         "name""com.test.mydemo2.MainAbility"
  4.         "icon""$media:icon"
  5.         "description""$string:mainability_description"
  6.         "label""$string:entry_MainAbility"
  7.         "type""page"
  8.         "launchType""standard" 
  9.       } 

购物模式

代码文件

代码文件结构如下:

【木棉花】轻松玩转平行视界(下)-鸿蒙HarmonyOS技术社区

下面只给出部分重点代码

config.json配置文件的module对象中新增metaData:

  1. "metaData": { 
  2.       "customizeData": [ 
  3.         { 
  4.         "name""EasyGoClient"
  5.         "value""true" 
  6.         } 
  7.       ] 
  8.     } 

 在src -> main -> resources -> rawfile目录下增加easygo.json配置文件:

  1.   "easyGoVersion""1.0"
  2.   "client""com.test.mydemo3"
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function""magicwindow"
  7.         "required""true" 
  8.       }, 
  9.       "body": { 
  10.         "mode""0"
  11.         "transActivities": [ 
  12.           "com.test.mydemo3.NavigationAbility"
  13.           "com.test.mydemo3.FirstAbility"
  14.           "com.test.mydemo3.SecondAbility" 
  15.         ], 
  16.         "Abilities": [ 
  17.           { 
  18.             "name""com.test.mydemo3.MainAbility"
  19.             "defaultFullScreen""false" 
  20.           }, 
  21.           { 
  22.             "name""com.test.mydemo3.NavigationAbility"
  23.             "defaultFullScreen""false" 
  24.           }, 
  25.           { 
  26.             "name""com.test.mydemo3.FirstAbility"
  27.             "defaultFullScreen""false" 
  28.           }, 
  29.           { 
  30.             "name""com.test.mydemo3.SecondAbility"
  31.             "defaultFullScreen""false" 
  32.           }, 
  33.           { 
  34.             "name""com.test.mydemo3.ThridAbility"
  35.             "defaultFullScreen""false" 
  36.           } 
  37.         ], 
  38.         "UX": { 
  39.           "isDraggable""true"
  40.           "supportLock""true" 
  41.         } 
  42.       } 
  43.     } 
  44.   ] 

上述代码easygo.json配置文件的相关元素的描述如下:

  1.   "easyGoVersion"
  2.   "client"
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function"
  7.         "required"
  8.       }, 
  9.       "body": { 
  10.         "mode": 0":购物模式, 
  11.         "transActivities": [ 
  12.           过渡页面列表 
  13.         ], 
  14.         "Abilities": [ 
  15.           { 
  16.             "name"
  17.             "defaultFullScreen"
  18.           } 
  19.         ], 
  20.         "UX": { 
  21.           "isDraggable"
  22.           "supportLock":, 可选,是否支持应用内用户锁定功能."true": 支持锁定,;,"false": 不支持(缺省值为false
  23.         } 
  24.       } 
  25.     } 
  26.   ] 

运行效果

平板横屏的运行效果如下:

【木棉花】轻松玩转平行视界(下)-鸿蒙HarmonyOS技术社区

小结

购物模式能有效解决宽屏设备上的显示适配问题,适用于购物类的场景和应用。

从上述运行效果可以发现购物模式有三个特点:

1. 左点右出。

2. 右边点击启动新的窗口,把当前内容往左推,新的内容在右边展示。

3. 左边触发的返回,左右侧窗口内的界面都将退出上一层级或首页;右边触发的返回,右侧窗口回到上一层级,不影响左边的页面。

后台锁定

应用启用平行视界后,特定的适合多任务并行/有多任务并行需求的场景,可使用后台锁定。

可通过以下进行配置:

  1. "UX": { 
  2.         "supportLock""true" 
  3.       } 

 双窗口显示状态会显示锁定按钮,用户点击后可以进行锁定和解锁操作;锁定后,左右窗口不再关联,即左侧打开新窗口在左侧显示,右侧打开新窗口在右侧显示。例如普通购物模式下,点击右侧屏幕的内容,会把右侧内容向左推;直播场景锁定后,直播固定在左侧显示,点击右侧内容,更换右侧的显示内容。

其它

  1.   "easyGoVersion": , 
  2.   "client": , 
  3.   "logicEntities": [ 
  4.     { 
  5.       "head": { 
  6.         "function": , 
  7.         "required"
  8.       }, 
  9.       "body": { 
  10.         "mode""0"
  11.         "abilityPairs": [ 
  12.           { 
  13.             "from": , 
  14.             "to"
  15.           } 
  16.         ], 
  17.         "defaultDualAbilities": {可选,应用冷启动默认打开首页双屏配置 
  18.           "mainPages": Page Ability包名,冷启动应用打开此页面时,系统在左屏自动启动的页面, 
  19.           "relatedPage": Page Ability包名,冷启动应用打开此页面时,系统在右屏自动启动的页面 
  20.         }, 
  21.         "transActivities": [ 
  22.  
  23.         ], 
  24.         "Abilities": [ 
  25.           { 
  26.             "name": , 
  27.             "defaultFullScreen"
  28.           } 
  29.         ], 
  30.         "UX": { 
  31.           "supportRotationUxCompat": 可选,是否开启窗口缩放,用于提高转屏应用UX显示兼容性(仅针对平板产品生效)."true": 支持;"false": 不支持(缺省值为false), 
  32.           "isDraggable": , 
  33.           "supportVideoFullscreen": 可选,是否支持视频全屏(仅针对平板产品生效)."true": 支持;"false": 不支持(缺省值为false), 
  34.           "supportDraggingToFullScreen": 可选,是否支持在分屏和全屏之间拖动切换."ALL": 所有设备上支持此功能;"PAD": 仅平板产品上支持此功能;,"FOLD": 仅折叠屏上支持此功能, 
  35.           "supportLock"
  36.         } 
  37.       } 
  38.     } 
  39.   ] 

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-11-10 16:07:01

鸿蒙HarmonyOS应用

2021-11-08 10:20:48

鸿蒙HarmonyOS应用

2020-09-24 10:57:12

编程函数式前端

2021-11-15 10:15:37

鸿蒙HarmonyOS应用

2023-08-18 14:39:02

2010-07-09 12:09:34

IT运维Mocha BSM摩卡软件

2010-09-01 10:09:32

CSS样式

2013-11-01 10:41:52

Windows 8.1应用技巧

2018-03-15 14:07:17

润乾Excel行列转换

2010-09-06 12:46:05

无线网络

2014-08-19 09:10:45

IT运维

2015-08-12 10:54:22

架构云

2010-05-07 10:47:18

微软Live照片库

2011-05-04 14:00:02

打印机Word打印

2019-03-15 11:07:35

华为云

2021-10-28 14:58:15

鸿蒙HarmonyOS应用

2011-05-04 09:56:54

打印机Word打印

2010-01-15 10:14:21

C++ Builder

2010-07-13 09:39:58

SolarisZFS文件系统
点赞
收藏

51CTO技术栈公众号