当前位置: 首页 > news >正文

HarmonyOS学习(九)——窗口管理

文章目录

        • 1、窗口开发概述
          • 1.1、应用窗口的分类
          • 1.2、窗口模块的用途
          • 1.3、窗口沉浸式能力
        • 2、窗口管理
          • 2.1、 设置应用主窗口的属性及目标界面
          • 2.2、设置应用子窗口的属性及目标界面
          • 2.3、窗口沉浸式能力
        • 3、沉浸式实例

1、窗口开发概述
1.1、应用窗口的分类

应用窗口是指与应用显示相关的窗口。根据显示内容的不同,应用窗口分为** 应用主窗口** 和 应用子窗口

应用主窗口应用主窗口用于显示应用界面,会在“任务管理”界面显示
应用子窗口应用子窗口用于显示应用的弹窗,悬浮窗等辅助窗口,不会在“任务管理”界面显示
1.2、窗口模块的用途

窗口提供管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性的设置。以及对各窗口的管理调度。

窗口模块的主要职责如下:

提供应用和系统界面的窗口对象应用开发者通过窗口加载UI界面,实现界面显示功能
组织不同窗口的显示关系维护不同窗口间的叠加层次和位置属性,应用和系统的窗口具有多种类型。不同类型的窗口具有不同的默认位置和叠加层次。同时,用户操作也可以在一定范围内对窗口的位置和叠加层次进行调整。
提供窗口装饰窗口装饰指窗口标题栏和窗口边距。窗口标题栏通常包括窗口最大化、最小化以及关闭按钮等界面元素。
提供窗口动效在窗口显示、隐藏以及窗口切换时,窗口模块通常会添加动画效果,以使交互更加流畅
指导输入事件分发根绝当前窗口的状态或焦点进行事件的分发。触摸和鼠标事件根据窗口的位置和尺寸进行分发,而键盘事件会被分发到焦点窗口。应用开发者可以通过窗口模块提供的接口设置窗口是否可以触摸,是否占据焦点
1.3、窗口沉浸式能力

窗口沉浸式能力是对状态栏、导航栏等系统窗口进行控制,减少状态栏、导航栏等系统界面的突兀感

沉浸式能力只应用在主窗口作为全屏窗口时生效。弹窗、悬浮窗等辅助窗口无法使用沉浸式能力。

2、窗口管理
2.1、 设置应用主窗口的属性及目标界面

在Stage模型下,应用窗口由Ability创建并维护生命周期。在Ability的onWindowStageCreate回调中,通过windowStage获取应用主窗口,即可对其进行属性设置等操作。

常用API

getMainWindow(callback:AsyncCallback)获取windStage实例下的主窗口
loadContent(path:string,callback:AsyncCallback)为当前windowStage的主窗口加载具体页面
setBrightness(brightnedd:number,callback:AsyncCallback)设置屏幕亮度值
setTouchable(isTouchable:boolean,callback:AsyncCallback)设置窗口是否为可触状态
2.2、设置应用子窗口的属性及目标界面

开发者可以按需创建应用子窗口,如弹窗,并对其进行属性设置等操作。

createSubWindow(name:string.callback:AsyncCallback)创建子窗口
loadContent(path:string,callback:AsyncCallback)为当前窗口加载具体页面
show(callback:AsyncCallback)显示当前窗口
2.3、窗口沉浸式能力

实现沉浸式效果有两种方法

  • 调用setFullScreen接口,设置应用主窗口为全屏显示,此时导航栏,状态栏将隐藏,从而达到沉浸式效果。
  • 调用setSystemBarEnable接口。设置导航栏,状态栏不显示,从而达到沉浸式效果。
3、沉浸式实例
onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');// 获取应用主窗口let windowClass = null;windowStage.getMainWindow((err, data) => {if (err.code) {console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));return;}windowClass = data;console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));// 实现沉浸式效果,设置应用主窗口为全屏显示。let isFullScreen = true;windowClass.setFullScreen(isFullScreen, (err) => {if (err) {console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err));return;}console.info('Succeeded in enabling the full-screen mode.');});windowStage.loadContent('pages/Index', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});
});}

http://www.mrgr.cn/news/22884.html

相关文章:

  • 最小堆最大堆
  • 如何下载安装AutoCAD 2025
  • 10款国民级企业文件加密系统介绍,究竟哪一个是你的菜?
  • 跨国公司在华研发战略调整对中国IT产业的影响与应对
  • 华为ADS3.0智驾全揭秘,问界M9可以封王了
  • 电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此
  • HTML5中的数据存储sessionStorage、localStorage
  • 【算法思想·二叉树】后续篇
  • 【 html+css 绚丽Loading 】 000045 太极旋流轮
  • 【算法】分治 · 归并
  • 通过LinkedIn的思想领袖广告提升有机帖子效果,降低每次结果成本
  • 等保测评是什么?为什么要做等保测评?
  • FPGA技术赋能云数据中心:提高性能与效率
  • uniapp中scroll-view标签
  • pyston,一个神奇的 Python 库!
  • 中国企业数据资产入表情况跟踪全文解析
  • 使用opencv优化图片(画面变清晰)
  • liunx io模型多路复用
  • 【网络安全】URL解析器混淆绕过CSP实现XSS
  • 2181. 合并零之间的节点(24.9.9)