目录

窗口层级

场景介绍

窗口层级是指多个窗口在屏幕上的堆叠顺序,决定窗口的前后显示关系,通常称为Z序(ZOrder)。

ZOrder值越大,窗口越靠前显示,能够覆盖ZOrder值较小的窗口;反之,ZOrder值较小的窗口则可能被其他窗口遮挡。

对于三方应用,无法直接修改窗口的ZOrder,但可以通过控制zLevel属性来间接影响子窗口的显示层级。

系统通过管理ZOrder和zLevel实现对用户界面可见性与交互优先级的控制。

本节将从基本概念、层级规则、父子窗口关系、TopMost窗口机制以及相关接口示例五个方面,系统化阐述窗口层级管理机制。

基本概念与层级规则

[h2]ZOrder与zLevel

ZOrder表示系统内部维护的窗口堆叠顺序。数值越大,窗口越靠前。三方应用不可直接修改ZOrder。

zLevel表示三方应用可控制的应用内子窗口之间的相对层级,仅针对非模态子窗口有效。zLevel取值范围为[-10000, 10000],默认值为0。zLevel越高,对应的ZOrder越大,窗口越靠前。

[h2]窗口zLevel层级规则

[h2]窗口类型层级规则

[h2]父子窗口层级规则

[h2]TopMost置顶窗口层级规则

窗口层级控制机制汇总表

特性/操作 控制方式 生效范围 适用场景
ZOrder 系统管理 可跨应用生效 内部渲染顺序管理
zLevel setSubWindowZLevel()/创建窗口时设置 仅同应用内生效 子窗口层级管理
窗口置顶 setWindowTopmost() 可跨应用生效 视频、导航等常驻窗口
点击抬升 setRaiseByClickEnabled() 同应用内同类型子窗口之间 防误触、固定布局

层级相关开发场景

功能 典型场景 对应接口
设置主窗口置顶 用于实现将窗口置于其他应用窗口之上不被遮挡。如视频通话、导航等场景。 setWindowTopmost()
提升子窗口到顶层

将子窗口提升至当前应用内同类型子窗口的最顶层,只在当前应用同一个父窗口下相同zLevel值的子窗范围内生效。

例如,视频会议中的悬浮工具栏,主窗口是视频画面,子窗口包括聊天框、共享控制栏等。点击聊天框时,可调用raiseToAppTop()将其提升到顶层,避免被其他子窗口遮挡。

raiseToAppTop()
禁止/使能子窗点击抬升功能 可用于固定布局的工具面板,防止用户误操作导致层级混乱。 setRaiseByClickEnabled()
获取当前应用内层级最高的窗口 可判断当前最前显示的窗口(可能是主窗口或子窗口),用于日志记录或状态同步等场景。 getLastWindow()