HarmonyOS窗口管理---建立子窗口

打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

窗口开发概述

HarmonyOS通过窗口模块实现窗口管理,包括:

  • 针对应用开发者,提供了界面显示和交互本领。
  • 针对终端用户,提供了控制应用界面的方式。
  • 针对整个操作系统,提供了差别应用界面的组织管理逻辑。
应用窗口的分类

应用窗口是指与应用显示相关的窗口。根据显示内容的差别,应用窗口又分为应用主窗口和应用子窗口两种范例。

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

窗口提供管理窗口的一些底子本领,包括对当前窗口的创建、销毁、各属性的设置,以及对各窗口间的管理调度。
该模块提供以下窗口相关的常用功能。

  • Window:当前窗口实例,窗口管理器管理的基本单元。
  • WindowStage:窗口管理器,用于管理各个基本窗口单元。
在HarmonyOS中,窗口模块的紧张职责如下;

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

窗口沉浸式本领是指对状态栏、导航栏等系统窗口进行控制,淘汰状态栏、导航栏等系统,界面的突兀感,从而利用户获得最佳体验的本领。
沉浸式本领只在应用主窗口作为全屏窗口时见效。通常环境下,应用子窗口(弹窗、悬浮等辅助窗口)和处于自由窗口下的应用主窗口无法利用沉浸式本领
代码实现:
在EntryAbility中导入WindowStage:窗口管理器
  1. AppStorage.SetOrCreate("windowStage",windowStage)
复制代码
创建子窗口:这里是在异步函数中写的子窗口,这样就可以在触发生命周期的时候显示子窗口
注意:子窗口的监听事件是没有写的如有必要可以自行添加,还可以添加各种属性更多属性点击链接查看所需https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-window-0000001477981397-V2
  1. //导入模块
  2. import window from '@ohos.window'
  3. @Entry
  4. @Component
  5. export struct SubWindow {
  6.   async aboutToAppear() {
  7.     //创建子窗口  导入窗口管理器
  8.     let windowStage = AppStorage.Get<window.WindowStage>("windowStage")
  9.     let subWindow: window.Window = null
  10.     windowStage.createSubWindow("SubWindow", (err, date) => {
  11.       subWindow = date
  12.       // 子窗口创建成功后,设置子窗口的位置
  13.       subWindow.moveWindowTo(1000, 300)
  14.       // 设置子窗口的大小
  15.       subWindow.resize(500, 500)
  16.       // 为子窗口加载对应的目标页面。
  17.       subWindow.setUIContent("View/SubWindow")
  18.       // 显示子窗口。
  19.       subWindow.showWindow()
  20.     })
  21.   }
  22.   build() {
  23.     Column() {
  24.     }
  25.   }
  26. }
复制代码
目标页面:任意写一个Page页面导入子窗口页面代码就欧克了
  1. import window from '@ohos.window'
  2. @Entry
  3. @Component
  4. struct Index {
  5.   @State message: string = '子窗口加载页面'
  6.   private sub: window.Window
  7.   aboutToAppear() {
  8.     this.sub = window.findWindow('SubWindow')
  9.   }
  10.   build() {
  11.     Column() {
  12.       Text(this.message)
  13.         .fontSize(30)
  14.     }.width('100%').height('100%').backgroundColor(Color.Pink)
  15.   }
  16. }
复制代码
结果图:

本日内容就完成了,希望能帮助到各位朋友,最后愿在座的都能在生疏的人山人海中,找到自由的誓约

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表