OpenHarmony北向-无上下状态栏的全屏沉浸式设置

系统 OpenHarmony
在这里我们主要用到的是’@ohos.window’提供的管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性设置,以及对各窗口间的管理调度。

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

前言

最近在尝试学习OpenHarmony北向开发时碰到了一个问题,发现将应用运行在开发板上时,在看视频、玩游戏等场景下,用户往往希望隐藏状态栏、导航栏等不必要的系统窗口,从而获得更佳的沉浸式体验。在这里提供一种的解决方法。

demo效果

#盲盒+码#【FFH】OpenHarmony北向-无上下状态栏的全屏沉浸式设置-开源基础软件社区

#盲盒+码#【FFH】OpenHarmony北向-无上下状态栏的全屏沉浸式设置-开源基础软件社区

(前者为设置后,可见上下位置都填充了,达到了沉浸式全屏的效果)

具体步骤

在这里我们主要用到的是’@ohos.window’提供的管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性设置,以及对各窗口间的管理调度。以下是OpenHarmony官方文档对应的链接​​OpenAtom OpenHarmony​​。

窗口沉浸式效果

要达到沉浸式效果,一般有三种方法

  1. 设置为全屏显示。
  2. 设置隐藏状态栏、导航栏。
  3. 设置全屏布局,并使导航栏、状态栏等系统窗口和应用主窗口保持主题协调一致。

我们在这里使用的是第一种方法。

window模块

在OpenHarmony中,窗口模块主要负责以下职责:

  • 提供应用和系统界面的窗口对象。应用开发者通过窗口加载UI界面,实现界面显示功能。
  • 组织不同窗口的显示关系,即维护不同窗口间的叠加层次和位置属性。应用和系统的窗口具有多种类型,不同类型的窗口具有不同的默认位置和叠加层次(Z轴高度)。同时,用户操作也可以在一定范围内对窗口的位置和叠加层次进行调整。
  • 提供窗口装饰。窗口装饰指窗口标题栏和窗口边框。窗口标题栏通常包括窗口最大化、最小化及关闭按钮等界面元素,具有默认的点击行为,方便用户进行操作;窗口边框则方便用户对窗口进行拖拽缩放等行为。窗口装饰是系统的默认行为,开发者可选择启用/禁用,无需关注UI代码层面的实现。
  • 提供窗口动效。在窗口显示、隐藏及窗口间切换时,窗口模块通常会添加动画效果,以使各个交互过程更加连贯流畅。在OpenHarmony中,应用窗口的动效为默认行为,不需要开发者进行设置或者修改。
  • 指导输入事件分发。即根据当前窗口的状态或焦点,进行事件的分发。触摸和鼠标事件根据窗口的位置和尺寸进行分发,而键盘事件会被分发至焦点窗口。应用开发者可以通过窗口模块提供的接口设置窗口是否可以触摸和是否可以获焦。

导入模块

首先我们导入能力模块。

import window from '@ohos.window';

获取窗口对象

然后获取当前应用内最后显示的窗口的promise对象。

var windowClass = null;
let promise = window.getTopWindow();

具体实现

我们在这个Promise异步回调中我们利用’windowClass.setFullScreen()'进行沉浸式全屏设置。

promise.then((data)=> {
windowClass = data;
console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data))
}).then(()=>{
windowClass.setFullScreen(true)
this.windowFull=true
console.info('Succeeded in obtaining the top window. Data: ')
})

全部代码

<!--index.html-->
<div class="container" onclick="windowClick">
<text class="title">
{{ $t('strings.hello') }} {{ title }}
</text>
</div>
//index.js
import window from '@ohos.window';

export default {
data: {
title: "",
windowFull:false//flag
},
onInit() {
this.title = this.$t('strings.world');
},
windowClick(){
//点击触发全屏
var windowClass = null;
let promise = window.getTopWindow();
promise.then((data)=> {
windowClass = data;
console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data))
}).then(()=>{
if(this.windowFull===true){
windowClass.setFullScreen(false)//取消全屏
this.windowFull=false
}else{
windowClass.setFullScreen(true)//全屏
this.windowFull=true
}
console.info('Succeeded in obtaining the top window. Data: ')
})
}
}

总结

学习道路上的一点点小记录。

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​​。

责任编辑:jianghua 来源: 51CTO开源基础软件社区
相关推荐

2017-02-17 11:00:57

状态栏Android

2016-11-29 11:20:08

Android

2017-12-05 12:44:57

Android沉浸式状态栏APP

2021-08-09 20:29:27

Android沉浸式状态栏

2013-07-18 16:09:10

自定义iOS状态栏iOS开发iOS学习

2015-02-12 14:49:36

CGToast状态栏提示Status

2014-06-06 14:03:13

iOS状态栏提示控件原理

2012-12-24 14:42:48

iOS自定义状态栏

2013-11-20 15:08:32

iOS开发状态栏

2021-06-15 15:04:38

Android 12安卓通话

2021-06-15 15:28:31

谷歌Android开发

2022-08-08 19:46:26

ArkUI鸿蒙

2022-02-22 09:16:41

AndroidWindows状态栏

2018-05-16 09:11:19

Android状态栏移动系统

2022-02-21 15:05:09

LauncherOpenHarmon鸿蒙

2010-07-29 14:58:49

Flex全屏模式

2022-03-16 15:30:25

barAndroid开发者

2013-01-28 15:43:15

SDNAPI软件定义网络

2014-01-21 09:28:44

ONFSDN北向接口

2021-11-15 23:39:03

Windows 10Windows微软
点赞
收藏

51CTO技术栈公众号