官方文档
@ohos.window (窗口)-窗口管理-ArkTS API-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
前言
官网对window窗口管理的描述很全面,以下是各人对各个api的总结。
该模块提供以下窗口相关的常用功能: 窗口实例window和窗口管理器windowStage
window
当前窗口实例(windowClass),窗口管理器管理的基本单元。
方法
| 方法 | 描述 | api |
|---|---|---|
| createWindow | 创建子窗口或者系统窗口 | 9 |
| findWindow | 查找name所对应的窗口 | 9 |
| getLastWindow | 获取当前应用内最上层的子窗口,若无应用子窗口,则返回应用主窗口 | 9 |
| shiftAppWindowFocus | 在同应用内将窗口焦点从源窗口转移到目标窗口,仅支持应用主窗和子窗的焦点转移。 | 11 |
| shiftAppWindowPointerEvent | 在同应用内窗口分合场景下,需要将输入事件从源窗口转移到目标窗口 | 15 |
| getWindowsByCoordinate | 查询本应用指定坐标下的可见窗口数组,按当前窗口层级排列,层级最高的窗口对应数组下标为0,使用Promise异步回调。 | 14 |
| getAllWindowLayoutInfo | 获取指定屏幕上可见的窗口布局信息数组,按当前窗口层级排列,层级最高的对应数组index为0 | 15 |
| getVisibleWindowInfo | 获取当前屏幕的可见主窗口(未退至后台的主窗口)信息 | 18 |
windowClass方法
windowClass为获取的窗口实例, 用于操作目标窗口,在使用前需要通过getLastWindow()、createWindow()、findWindow()中的任一方法获取。
| 方法 | 描述 | api |
|---|---|---|
| showWindow | 显示当前窗口 | 9 |
| destroyWindow | 销毁当前窗口 | 9 |
| moveWindowTo | 移动窗口位置 | 9 |
| moveWindowToAsync | 移动窗口位置, 同步方法, 回调中可使用getWindowProperties()立即获取最终生效结果。 | 12 |
| moveWindowToAsync | 移动窗口位置, 同步方法, 可设置moveConfiguration, 回调中可使用getWindowProperties()立即获取最终生效结果。 | 15 |
| moveWindowToGlobal | 基于屏幕坐标移动窗口位置,使用Promise异步回调 | 13 |
| moveWindowToGlobal | 基于屏幕坐标移动窗口位置,使用Promise异步回调, 可设置moveConfiguration | 15 |
| resize | 改变当前窗口大小 | 9 |
| resizeAsync | 改变当前窗口大小, 同步方法 | 12 |
| getWindowProperties | 获取当前窗口的属性 | 9 |
| getWindowDensityInfo | 获取当前窗口所在屏幕的系统显示大小缩放系数、系统默认显示大小缩放系数和自定义显示大小缩放系数信息。 | 15 |
| getGlobalRect | 获取窗口在屏幕上的真实显示区域,同步接口。(在某些设备上,窗口显示时可能经过了缩放,此接口可以获取缩放后窗口在屏幕上的真实位置和大小。) | 13 |
| getWindowAvoidArea | 获取当前应用窗口避让区。 | 9 |
| setSystemAvoidAreaEnabled | 创建悬浮窗、模态窗或WindowType窗口类型为系统窗口时,可以调用该接口使能窗口获取避让区。 | 18 |
| isSystemAvoidAreaEnabled | 获取悬浮窗、模态窗或WindowType为系统类型的窗口是否可以获取窗口内容的避让区。 | 18 |
| setTitleAndDockHoverShown | 设置主窗口进入全屏沉浸式时鼠标Hover到热区上是否显示窗口标题栏和dock栏,使用Promise异步回调,仅2in1设备可用。 | 14 |
| setWindowLayoutFullScreen | 设置主窗口或子窗口的布局是否为沉浸式布局,从API version 14开始,该接口在2in1设备或平板设备的自由多窗模式(可点击设备控制中心中的自由多窗按钮开启)下调用不生效。 | 9 |
| setImmersiveModeEnabledState | 设置当前窗口是否开启沉浸式布局,该调用不会改变窗口模式和窗口大小, 2in1 和平板不生效 | 12 |
| getImmersiveModeEnabledState | 查询当前窗口是否已经开启沉浸式布局。 | 12 |
| setWindowDelayRaiseOnDrag | 设置窗口是否使能延迟抬升,仅主窗和子窗可设置。 | 19 |
| setWindowSystemBarEnable | 设置主窗口状态栏、底部导航(根据用户设置,可表现为导航条或三键导航栏)的可见模式,2in1设备不生效 | 9 |
| setSpecificSystemBarEnabled | 设置主窗口状态栏、底部导航区域的显示和隐藏,2in1设备不生效 | 11 |
| setWindowSystemBarProperties | 设置主窗口状态栏的属性,2in1设备不生效 | 9 |
| getWindowSystemBarProperties | 主窗口获取状态栏的属性。 | 12 |
| setStatusBarColor | 设置主窗口状态栏的文字颜色,使用Promise异步回调。该接口在2in1设备上调用不生效。子窗口不支持设置状态栏文字颜色,调用无效果。 | 18 |
| getStatusBarProperty | 获取主窗口状态栏的属性 | 18 |
| setPreferredOrientation | 设置主窗口的显示方向属性,仅在支持跟随sensor旋转的设备上生效, 2in1设备不生效 | 9 |
| getPreferredOrientation | 主窗口调用,获取窗口的显示方向属性。 | 12 |
| getUIContext | 获取UIContext实例。 | 10 |
| setUIContent | 根据当前工程中指定的某个页面路径为窗口加载具体页面内容。 | 9 |
| loadContent | 根据当前工程中指定的页面路径为窗口加载具体页面内容,通过LocalStorage传递状态属性给加载的页面。 | 9 |
| loadContentByName | 加载命名路由,加载LocalStorage。重复调用该接口将先销毁旧的页面内容再加载新的页面内容,请谨慎使用。 | 11 |
| isWindowShowing | 判断当前窗口是否已显示。 | 9 |
| isWindowSupportWideGamut | 判断当前窗口是否支持广色域模式。 | 9 |
| setWindowColorSpace | 设置当前窗口为广色域模式或默认色域模式 | 9 |
| getWindowColorSpace | 获取当前窗口色域模式。 | 9 |
| setWindowBackgroundColor | 设置窗口的背景色 | 9 |
| setWindowBrightness | 允许应用主窗口设置屏幕亮度值 | 9 |
| setWindowFocusable | 设置窗口是否具有获得焦点的能力 | 9 |
| setWindowKeepScreenOn | 设置屏幕是否为常亮状态 | 9 |
| setWindowPrivacyMode | 设置窗口是否为隐私模式(用于禁止截屏/录屏的场景) | 9 |
| setWindowTouchable | 设置窗口是否为可触状态 | 9 |
| snapshot | 获取窗口截图, 隐私模式为白屏 | 9 |
| snapshotIgnorePrivacy | 获取窗口截图, 隐私模式不影响 | 18 |
| setAspectRatio | 设置窗口内容布局的比例 | 10 |
| resetAspectRatio | 取消设置窗口内容布局的比例 | 10 |
| minimize | 当调用对象为主窗口时,实现最小化功能,当调用对象为子窗口或悬浮窗时,实现隐藏功能 | 11 |
| maximize | 实现最大化功能。主窗口可调用此接口实现最大化功能;子窗口需在创建时设置子窗口参数maximizeSupported为true,再调用此接口可实现最大化功能 | 12 |
| setResizeByDragEnabled | 设置窗口是否使能通过拖拽进行缩放 | 14 |
| recover | 将主窗口从全屏、最大化、分屏模式下还原为浮动窗口,并恢复到进入该模式之前的大小和位置,已经是浮动窗口模式不可再还原 | 11 |
| restore | 将主窗口从最小化状态,恢复到前台显示,并恢复到进入该模式之前的大小和位置 | 14 |
| getWindowLimits | 获取当前应用窗口的尺寸限制。 | 11 |
| setWindowLimits | 设置当前应用窗口的尺寸限制 | 11 |
| setWindowLimits | 设置当前应用窗口的尺寸限制, 此接口仅支持2in1设备 | 15 |
| setWindowMask | 设置异形窗口的掩码 | 12 |
| keepKeyboardOnFocus | 窗口获焦时保留由其他窗口创建的软键盘 | 11 |
| setWindowDecorVisible | 设置窗口标题栏是否可见,对存在标题栏和三键区的窗口形态生效 | 11 |
| getWindowDecorVisible | 查询窗口标题栏是否可见,仅支持2in1设备和平板的自由多窗模式 | 18 |
| setWindowTitle | 设置窗口标题,存在标题栏的窗口形态生效,若不存在标题栏则返回1300002错误码 | 15 |
| setWindowTitleMoveEnabled | 设置窗口是否可移动窗口和双击最大化,仅支持2in1设备和平板的自由多窗模式 | 14 |
| setSubWindowModal | 设置子窗的模态属性是否启用 | 12 |
| setSubWindowModal | 设置子窗的模态属性是否启用,新增设置子窗的模态类型 | 14 |
| setWindowDecorHeight | 设置窗口的标题栏高度,仅支持2in1设备或平板设备的自由多窗模式 | 11 |
| setDecorButtonStyle | 设置装饰栏按钮样式,仅支持2in1设备或平板设备的自由多窗模式 | 14 |
| getDecorButtonStyle | 获取装饰栏按钮样式 | 14 |
| getWindowDecorHeight | 获取窗口的标题栏高度 | 11 |
| getTitleButtonRect | 获取主窗口或启用装饰的子窗口的标题栏上的最小化、最大化、关闭按钮矩形区域 | 11 |
| getWindowStatus | 获取当前应用窗口的模式 | 12 |
| isFocused | 判断当前窗口是否已获焦 | 12 |
| createSubWindowWithOptions | 创建主窗口、子窗口或悬浮窗下的子窗口 | 12 |
| setParentWindow | 更改子窗口的父窗口,该父窗口仅支持主窗口、子窗口或悬浮窗 | 19 |
| getParentWindow | 获取子窗口的父窗口 | 19 |
| setWindowTitleButtonVisible | 设置主窗标题栏上的最大化、最小化、关闭按钮是否可见 | 14 |
| setWindowTopmost | 设置主窗口置顶 | 14 |
| raiseToAppTop | 提升应用子窗口到顶层 | 14 |
| setRaiseByClickEnabled | 是否启用子窗口抬升功能 | 14 |
| enableLandscapeMultiWindow | 应用部分界面支持横向布局时,在进入该界面时使能,使能后可支持进入横向多窗 | 12 |
| disableLandscapeMultiWindow | 禁止进入横向多窗 | 12 |
| setDialogBackGestureEnabled | 设置模态窗口是否响应手势返回事件 | 12 |
| startMoving | 开始移动窗口 | 14 |
| startMoving | 指定鼠标在窗口内的位置并移动窗口 | 15 |
| stopMoving | 停止窗口移动 | 15 |
| setGestureBackEnabled | 设置当前窗口是否禁用返回手势功能,仅主窗全屏模式下生效,2in1设备下不生效 | 13 |
| isGestureBackEnabled | 获取当前窗口是否禁用返回手势功能,仅主窗全屏模式下生效,2in1设备不生效。 | 13 |
| setWindowShadowRadius | 设置子窗或悬浮窗窗口边缘阴影的模糊半径,此接口仅支持在2in1设备或平板设备上使用 | 17 |
| setWindowCornerRadius | 设置子窗或悬浮窗的圆角半径值,此接口仅支持在2in1设备或平板设备上使用 | 17 |
| getWindowCornerRadius | 获取子窗或悬浮窗的圆角半径值,此接口仅支持在2in1设备或平板设备上使用 | 17 |
| setExclusivelyHighlighted | 设置窗口独占激活态属性 | 15 |
| isWindowHighlighted | 获取当前窗口是否为激活态 | 18 |
| setFollowParentMultiScreenPolicy | 设置子窗或模态窗口(即WindowType为TYPE_DIALOG的窗口)的布局信息(position和size)是否跟随主窗。 | 17 |
| on | 监听事件 | 9 |
| off | 关闭监听 | 9 |
| setWindowGrayScale | 设置窗口灰阶 | 12 |
事件
| 事件 | 描述 | api |
|---|---|---|
| windowSizeChange | 窗口尺寸变化的监听 | 7 |
| avoidAreaChange | 应用窗口系统规避区变化的监听 | 9 |
| keyboardHeightChange | 开启固定态软键盘高度变化的监听 | 7 |
| keyboardDidShow | 固定态软键盘显示动画完成触发 | 18 |
| keyboardDidHide | 固定态软键盘隐藏动画完成触发 | 18 |
| touchOutside | 本窗口区域范围外的点击出发 | 11 |
| screenshot | 截屏事件 | 9 |
| dialogTargetTouch | 开启模态窗口所遮盖窗口的点击或触摸事件的监听 | 10 |
| windowEvent | 窗口生命周期变化 | 10 |
| displayIdChange | 本窗口所处屏幕变化事件的监听 | 14 |
| windowVisibilityChange | 可见状态变化事件的监听 | 11 |
| systemDensityChange | 本窗口所处屏幕的系统显示大小缩放系数变化事件的监听 | 15 |
| noInteractionDetected | 本窗口在指定超时时间内无交互事件的监听,交互事件支持物理键盘输入事件和屏幕触控点击事件,不支持软键盘输入事件。 | 12 |
| windowStatusChange | 窗口模式变化的监听 | 11 |
| windowTitleButtonRectChange | 窗口标题栏上的最小化、最大化、关闭按钮矩形区域变化的监听 | 11 |
| windowRectChange | 窗口位置及窗口大小变化触发 | 12 |
| subWindowClose | 子窗口关闭事件 | 12 |
| windowWillClose | 主窗口或子窗口关闭事件 | 15 |
| windowHighlightChange | 窗口激活态变化事件 | 15 |
| rotationChange | 窗口旋转变化事件 | 19 |
WindowStage
窗口管理器, 下列方法和事件都需在onWindowStageCreate()函数中使用WindowStage的实例调用对应方法。
方法
| 方法 | 描述 | api |
|---|---|---|
| getMainWindow | 获取该WindowStage实例下的主窗口 | 9 |
| getMainWindowAsync | 获取该WindowStage实例下的主窗口, 同步方法 | 9 |
| createSubWindow | 创建该WindowStage实例下的子窗口 | 9 |
| createSubWindowWithOptions | 创建该WindowStage实例下的子窗口(可设置子窗口参数) | 11 |
| getSubWindow | 获取该WindowStage实例下的所有子窗口 | 9 |
| loadContent | 加载指定页面 | 9 |
| loadContentByNametent | 根据命名路由的名字加载指定页面 | 11 |
| setDefaultDensityEnabled | 设置应用是否使用系统默认Density | 12 |
| setCustomDensity | 支持应用主窗口自定义其显示大小缩放系数,子窗会跟随主窗生效 | 15 |
| setWindowModal | 设置主窗的模态属性是否启用 | 14 |
| removeStartingWindow | 支持应用控制启动页消失时机 | 14 |
| setWindowRectAutoSave | 设置是否启用最后关闭的主窗尺寸的记忆功能 | 14 |
| setWindowRectAutoSave | 设置是否启用最后关闭的主窗尺寸的记忆功能,仅对2in1设备生效 | 17 |
| isWindowRectAutoSave | 判断当前主窗口是否已经启用尺寸记忆,仅对2in1设备生效 | 14 |
| setSupportedWindowModes | 设置主窗的窗口支持模式,此接口仅支持2in1设备或平板设备的自由多窗模式 | 15 |
事件
| 事件 | 描述 | api |
|---|---|---|
| windowStageEvent | WindowStage生命周期变化事件 | 9 |
| windowStageClose | 点击主窗三键区的关闭按钮监听事件 | 14 |