官方文档
@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 |