鸿蒙HarmonyOS官方模板学习 之 Full Screen Ability(Java)

开发 后端 OpenHarmony
使用Java语言开发,用于Phone设备的FeatureAbility模板,使用XML布局。为开发者提供全屏页的示例工程,使用了Image组件,并实现了横竖屏切换,并保持全屏显示。

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

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

https://harmonyos.51cto.com

Full Screen Ability(Java)

介绍

使用Java语言开发,用于Phone设备的FeatureAbility模板,使用XML布局。为开发者提供全屏页的示例工程,使用了Image组件,并实现了横竖屏切换,并保持全屏显示。

搭建环境

安装DevEco Studio,详情请参考DevEco Studio下载。

设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:

如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。

如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。

卡片布局

实现该效果其实有2个布局文件,land_main.xml #横屏布局文件,port_main.xml #竖屏布局文件

布局文件对比,有2处不同,

1.最外层的DirectionalLayout布局的orientation,横屏值设置为horizonal,竖屏值设置为vertical

2.横屏布局是bottom_margin/top_margin 设置为0,竖屏布局是left_margin/right_margin 设置为0

横屏布局文件竖屏布局文件

HarmonyOS官方模板学习 之 Full Screen Ability(Java)-鸿蒙HarmonyOS技术社区
HarmonyOS官方模板学习 之 Full Screen Ability(Java)-鸿蒙HarmonyOS技术社区

后台逻辑

1.启动时,添加窗口标志。 您可以从 WindowManager.LayoutConfig 获取当前支持的标志。

然后根据手机方向的不同来加载不同的布局文件。

  1. @Override 
  2.     public void onStart(Intent intent) { 
  3.         super.onStart(intent); 
  4.  
  5.         // hide status bar 
  6.         HiLog.debug(LABEL, "添加窗口标志,全屏模式,隐藏状态栏和面板可以扩展到屏幕之外。"); 
  7.         this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_ALLOW_EXTEND_LAYOUT); 
  8.         this.getWindow().addFlags(WindowManager.LayoutConfig.MARK_FULL_SCREEN); 
  9.  
  10.         // adapt orientation 
  11.         //0:PORTRAIT,1:LANDSCAPE 
  12.         int orientation = getResourceManager().getConfiguration().direction; 
  13.         HiLog.debug(LABEL, "从资源管理配置中获取方向:%{public}s ,加载布局文件", orientation==0?"PORTRAIT":"LANDSCAPE"); 
  14.         if (orientation == Configuration.DIRECTION_HORIZONTAL) { 
  15.             super.setUIContent(ResourceTable.Layout_land_main); 
  16.         } else { 
  17.             super.setUIContent(ResourceTable.Layout_port_main); 
  18.         } 
  19.     } 

2.当屏幕的显示方向改变时重新加载布局文件,此处和启动时判定方式不同,

利用AbilityInfo.DisplayOrientation和 AbilityInfo.DisplayOrientation.LANDSCAPE 进行判定。

  1. @Override 
  2.     protected void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) { 
  3.         super.onOrientationChanged(displayOrientation); 
  4.  
  5.         if (displayOrientation == AbilityInfo.DisplayOrientation.LANDSCAPE) { 
  6.             HiLog.debug(LABEL, "手机方向发生改变,变为:%{public}s ,重新加载布局文件""LANDSCAPE"); 
  7.  
  8.             setUIContent(ResourceTable.Layout_land_main); 
  9.         } else { 
  10.             HiLog.debug(LABEL, "手机方向发生改变,变为:%{public}s ,重新加载布局文件""PORTRAIT"); 
  11.  
  12.             setUIContent(ResourceTable.Layout_port_main); 
  13.         } 
  14.     } 

java版本的逻辑比较简单,看了一下js版本的案例,支持更多的设备类型,处理逻辑也不一样,tv和wearable没有横竖屏之分,尺寸差异也比较大,用了2张不同尺寸的图片,核心关键是利用css通过dispaly来控制显示和隐藏,适配不同的设备。

效果展示

[[407818]]

文章相关附件可以点击下面的原文链接前往下载

原文链接:https://harmonyos.51cto.com/posts/4776

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

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

https://harmonyos.51cto.com

 

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

2021-07-01 09:19:56

鸿蒙HarmonyOS应用

2021-06-18 14:55:57

鸿蒙HarmonyOS应用

2021-05-28 17:01:49

鸿蒙HarmonyOS应用

2021-08-30 18:34:35

鸿蒙HarmonyOS应用

2020-11-17 11:48:44

HarmonyOS

2020-12-30 11:08:50

鸿蒙HarmonyOShelloWorld

2020-11-25 12:02:02

TableLayout

2021-01-04 11:44:05

鸿蒙HarmonyOSAbilitySlic

2021-01-06 10:59:14

鸿蒙HarmonyOSPage Abilit

2020-12-28 11:19:06

鸿蒙HarmonyOSPage Abilit

2021-01-12 09:42:05

鸿蒙HarmonyOSPage Abilit

2021-10-18 10:14:26

鸿蒙HarmonyOS应用

2021-05-27 14:57:12

HarmonyOS 鸿蒙时代

2020-11-05 11:47:52

HarmonyOS

2023-03-08 08:33:44

Javajavac命令

2020-12-22 11:09:20

鸿蒙Feature AbiAbilitySlic

2020-11-10 10:00:10

HarmonyOS

2021-06-25 15:04:31

鸿蒙HarmonyOS应用

2020-12-03 11:34:12

Ability vs

2021-03-05 15:55:10

鸿蒙HarmonyOS应用开发
点赞
收藏

51CTO技术栈公众号