[文章]【木棉花】轻松玩转平行视界(下)

阅读量0
0
0


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

复制代码
导航模式代码文件
代码文件结构如下:

下面只给出部分重点代码
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.         findComponentById(ResourceTable.Id_btn_yes).setClickedListener(new Component.ClickedListener() {
  7.             @Override
  8.             public void onClick(Component component) {
  9.                 getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE);//申请横屏方向可进入全屏显示状态
  10.             }
  11.         });

  12.         findComponentById(ResourceTable.Id_btn_no).setClickedListener(new Component.ClickedListener() {
  13.             @Override
  14.             public void onClick(Component component) {
  15.                 getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation. PORTRAIT);//调用申请竖屏方向即可退出全屏状态
  16.             }
  17.         });

  18.         findComponentById(ResourceTable.Id_btn2).setClickedListener(new Component.ClickedListener() {
  19.             @Override
  20.             public void onClick(Component component) {
  21.                 Operation operation = new Intent.OperationBuilder()
  22.                         .withDeviceId("")
  23.                         .withBundleName(getBundleName())
  24.                         .withAbilityName(SecondAbility.class.getName())
  25.                         .build();
  26.                 intent.setOperation(operation);
  27.                 startAbility(intent);
  28.             }
  29.         });

  30.         findComponentById(ResourceTable.Id_btn3).setClickedListener(new Component.ClickedListener() {
  31.             @Override
  32.             public void onClick(Component component) {
  33.                 Operation operation = new Intent.OperationBuilder()
  34.                         .withDeviceId("")
  35.                         .withBundleName(getBundleName())
  36.                         .withAbilityName(ThridAbility.class.getName())
  37.                         .build();
  38.                 intent.setOperation(operation);
  39.                 startAbility(intent);
  40.             }
  41.         });

  42.         findComponentById(ResourceTable.Id_btn_back).setClickedListener(new Component.ClickedListener() {
  43.             @Override
  44.             public void onClick(Component component) {
  45.                 terminateAbility();
  46.             }
  47.         });
  48.     }

  49.     @Override
  50.     public void onActive() {
  51.         super.onActive();
  52.     }

  53.     @Override
  54.     public void onForeground(Intent intent) {
  55.         super.onForeground(intent);
  56.     }
  57. }
复制代码
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. {
  2.   "easyGoVersion": "1.0",
  3.   "client": "com.test.mydemo2",
  4.   "logicEntities": [
  5.     {
  6.       "head": {
  7.         "function": "magicwindow",
  8.         "required": "true"
  9.       },
  10.       "body": {
  11.         "mode": "1",
  12.         "abilityPairs": [
  13.           {
  14.             "from": "com.test.mydemo2.NavigationAbility",
  15.             "to": "*"
  16.           }
  17.         ],
  18.         "Abilities": [
  19.           {
  20.             "name": "com.test.mydemo2.MainAbility",
  21.             "defaultFullScreen": "false"
  22.           },
  23.           {
  24.             "name": "com.test.mydemo2.NavigationAbility",
  25.             "defaultFullScreen": "false"
  26.           },
  27.           {
  28.             "name": "com.test.mydemo2.FirstAbility",
  29.             "defaultFullScreen": "false"
  30.           },
  31.           {
  32.             "name": "com.test.mydemo2.SecondAbility",
  33.             "defaultFullScreen": "false"
  34.           },
  35.           {
  36.             "name": "com.test.mydemo2.ThridAbility",
  37.             "defaultFullScreen": "false"
  38.           }
  39.         ],
  40.         "UX": {
  41.           "isDraggable": "true"
  42.         }
  43.       }
  44.     }
  45.   ]
  46. }
复制代码
上述代码easygo.json配置文件的相关元素的描述如下:
  1. {
  2.   "easyGoVersion":
  3.   "client":
  4.   "logicEntities": [
  5.     {
  6.       "head": {
  7.         "function":
  8.         "required":
  9.       },
  10.       "body": {
  11.         "mode":
  12.         "abilityPairs": [
  13.           {
  14.             "from": 自定义模式下必选,AbilityA的包名,
  15.             "to": "*"表示任意Page Ability,
  16.           }表示A上启动任意Page Ability,触发分屏(A左任意右)
  17.         ],
  18.         "Abilities": [
  19.           {
  20.             "name":
  21.             "defaultFullScreen":
  22.           }
  23.         ],
  24.         "UX": {
  25.           "isDraggable":
  26.         }
  27.       }
  28.     }
  29.   ]
  30. }
复制代码
运行效果
平板横屏的运行效果如下:

小结
导航模式是一种系统提供的“分栏”,能帮助用户在应用内高效地来回切换。
从上述运行效果可以发现导航模式有三个特点:
1. 右半屏总是最后一个窗口。
2. 左边固定导航主页,左点右出,右点右出。
3. 左边触发的返回,左右分屏中的所有界面都将退出;右边触发的返回,右边回到上一层级,左边保持不变。
全屏显示Page Ability
另外关于平行视界状态下,部分Page Ability希望以全屏来显示,分别有动态方法和静态方法:
  • 动态方法:

  • 全屏显示:调用如下接口申请横屏方向可进入全屏显示状态:
  1. getContext().setDisplayOrientation(AbilityInfo.DisplayOrientation.LANDSCAPE);
复制代码
  • 静态方法:
  • easygo.json文件的Abilities属性中,将Page Ability的defaultFullScreen配置为true,即可实现Page Ability默认以全屏显示:
  1.           {
  2.             "name": "com.test.mydemo2.MainAbility",
  3.             "defaultFullScreen": "true"
  4.           }
复制代码
  • config.json文件的Abilities属性中,将Page Ability的orientation配置为landscape(横屏),Page Ability会一直以全屏状态显示:
  1.       {
  2.         "orientation": "landscape",
  3.         "visible": true,
  4.         "name": "com.test.mydemo2.MainAbility",
  5.         "icon": "$media:icon",
  6.         "description": "$string:mainability_description",
  7.         "label": "$string:entry_MainAbility",
  8.         "type": "page",
  9.         "launchType": "standard"
  10.       }
复制代码
购物模式
代码文件结构如下:

下面只给出部分重点代码
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. {
  2.   "easyGoVersion": "1.0",
  3.   "client": "com.test.mydemo3",
  4.   "logicEntities": [
  5.     {
  6.       "head": {
  7.         "function": "magicwindow",
  8.         "required": "true"
  9.       },
  10.       "body": {
  11.         "mode": "0",
  12.         "transActivities": [
  13.           "com.test.mydemo3.NavigationAbility",
  14.           "com.test.mydemo3.FirstAbility",
  15.           "com.test.mydemo3.SecondAbility"
  16.         ],
  17.         "Abilities": [
  18.           {
  19.             "name": "com.test.mydemo3.MainAbility",
  20.             "defaultFullScreen": "false"
  21.           },
  22.           {
  23.             "name": "com.test.mydemo3.NavigationAbility",
  24.             "defaultFullScreen": "false"
  25.           },
  26.           {
  27.             "name": "com.test.mydemo3.FirstAbility",
  28.             "defaultFullScreen": "false"
  29.           },
  30.           {
  31.             "name": "com.test.mydemo3.SecondAbility",
  32.             "defaultFullScreen": "false"
  33.           },
  34.           {
  35.             "name": "com.test.mydemo3.ThridAbility",
  36.             "defaultFullScreen": "false"
  37.           }
  38.         ],
  39.         "UX": {
  40.           "isDraggable": "true",
  41.           "supportLock": "true"
  42.         }
  43.       }
  44.     }
  45.   ]
  46. }
复制代码
上述代码easygo.json配置文件的相关元素的描述如下:
  1. {
  2.   "easyGoVersion":
  3.   "client":
  4.   "logicEntities": [
  5.     {
  6.       "head": {
  7.         "function":
  8.         "required":
  9.       },
  10.       "body": {
  11.         "mode": 0":购物模式,
  12.         "transActivities": [
  13.           过渡页面列表
  14.         ],
  15.         "Abilities": [
  16.           {
  17.             "name":
  18.             "defaultFullScreen":
  19.           }
  20.         ],
  21.         "UX": {
  22.           "isDraggable":
  23.           "supportLock":, 可选,是否支持应用内用户锁定功能."true": 支持锁定,;,"false": 不支持(缺省值为false)
  24.         }
  25.       }
  26.     }
  27.   ]
  28. }
复制代码
运行效果
平板横屏的运行效果如下:
小结
购物模式能有效解决宽屏设备上的显示适配问题,适用于购物类的场景和应用。
从上述运行效果可以发现购物模式有三个特点:
1. 左点右出。
2. 右边点击启动新的窗口,把当前内容往左推,新的内容在右边展示。
3. 左边触发的返回,左右侧窗口内的界面都将退出上一层级或首页;右边触发的返回,右侧窗口回到上一层级,不影响左边的页面。

后台锁定
应用启用平行视界后,特定的适合多任务并行/有多任务并行需求的场景,可使用后台锁定。
可通过以下进行配置:
  1.         "UX": {
  2.           "supportLock": "true"
  3.         }
复制代码
双窗口显示状态会显示锁定按钮,用户点击后可以进行锁定和解锁操作;锁定后,左右窗口不再关联,即左侧打开新窗口在左侧显示,右侧打开新窗口在右侧显示。例如普通购物模式下,点击右侧屏幕的内容,会把右侧内容向左推;直播场景锁定后,直播固定在左侧显示,点击右侧内容,更换右侧的显示内容。
其它
  1. {
  2.   "easyGoVersion": ,
  3.   "client": ,
  4.   "logicEntities": [
  5.     {
  6.       "head": {
  7.         "function": ,
  8.         "required":
  9.       },
  10.       "body": {
  11.         "mode": "0",
  12.         "abilityPairs": [
  13.           {
  14.             "from": ,
  15.             "to":
  16.           }
  17.         ],
  18.         "defaultDualAbilities": {可选,应用冷启动默认打开首页双屏配置
  19.           "mainPages": Page Ability包名,冷启动应用打开此页面时,系统在左屏自动启动的页面,
  20.           "relatedPage": Page Ability包名,冷启动应用打开此页面时,系统在右屏自动启动的页面
  21.         },
  22.         "transActivities": [

  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.   ]
  40. }
复制代码
写在最后
更多资料请关注我们的项目 : Awesome-Harmony_木棉花
本项目会长期更新 ,希望随着鸿蒙一同成长变强的既有我们,也有正在看着这个项目的你。明年3月,深大校园内的木棉花会盛开,那时,鸿蒙也会变的更好,愿这花开,有你我的一份。



回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友