【鸿蒙开发】窗口管理

367 阅读12分钟

官方文档

@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为015
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异步回调, 可设置moveConfiguration15
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设置应用是否使用系统默认Density12
setCustomDensity支持应用主窗口自定义其显示大小缩放系数,子窗会跟随主窗生效15
setWindowModal设置主窗的模态属性是否启用14
removeStartingWindow支持应用控制启动页消失时机14
setWindowRectAutoSave设置是否启用最后关闭的主窗尺寸的记忆功能14
setWindowRectAutoSave设置是否启用最后关闭的主窗尺寸的记忆功能,仅对2in1设备生效17
isWindowRectAutoSave判断当前主窗口是否已经启用尺寸记忆,仅对2in1设备生效14
setSupportedWindowModes设置主窗的窗口支持模式,此接口仅支持2in1设备或平板设备的自由多窗模式15

事件

事件描述api
windowStageEventWindowStage生命周期变化事件9
windowStageClose点击主窗三键区的关闭按钮监听事件14