窗口子系统基本概念与流程分析

窗口子系统位于 \fundation\windowmanager 目录下,提供对窗口与 Display 管理的基础能力

概览

窗口是什么

每个 Ability 在创建时都会创建一个主窗口,并且为该窗口设置 ACE 中的 UIContent 用于加载展示 UI 界面。基本上所有的 UI 视图都是在窗口中展示的,比如弹窗、toast、系统状态栏导航栏、应用等。因此窗口子系统是系统图形界面显示所需的基础子系统。

窗口的种类

  • 主窗口: 应用显示的主窗口,即每个 Ability 持有的主窗口
  • 子窗口: 必须依附于主窗口来创建与显示
  • 系统窗口 :其他窗口均属于系统窗口

窗口的属性

WindowFlag
flag 指定窗口的部分测量规则:

  • WINDOW_FLAG_NEED_AVOID 是否避开区域,默认避开,比如状态栏导航栏区域

  • WINDOW_FLAG_PARENT_LIMIT 是否受到父窗口的限制,默认不限制,如果限制,则宽高不能超过父窗口,需与 WINDOW_MODE_FLOATING 配合使用
    WindowMode
    mode 指定窗口的布局规则:

  • WINDOW_MODE_UNDEFINED 默认模式,默认宽高为 display 宽高减去状态栏导航栏等的宽高

  • WINDOW_MODE_FULLSCREEN 全屏模式,但需要与 * * * WINDOW_FLAG_NEED_AVOID 一起使用,默认宽高为 display 宽高

  • WINDOW_MODE_SPLIT_PRIMARY 分屏主窗口模式,如果是横屏则位于左侧,竖屏位于上方

  • WINDOW_MODE_SPLIT_SECONDARY 分屏副窗口模式,如果是横屏则位于右侧,竖屏位于下方

  • WINDOW_MODE_FLOATING 悬浮模式,悬浮窗口可以通过窗口边缘改变窗口大小,默认宽高为 display 宽高的 3/4
    应用主窗口可以通过启动 ability 时的参数 Want::PARAM_RESV_WINDOW_MODE(ohos.aafwk.param.windowMode)来侧面指定 WindowMode 的值

priority
窗口优先级决定了窗口的层级,priority 越大窗口越靠近顶部。该属性位于 WindowNode 内,且只能由 WindowType 决定。

WindowType
窗口类型的改变会引起 flag、mode、priority 或其他属性的改变,从而达到改变窗口的测量、排列与层级的目的。如:

  • WINDOW_TYPE_STATUS_BAR
property_->SetWindowMode(WindowMode::WINDOW_MODE_FLOATING);
property_->SetFocusable(false);

  • WINDOW_TYPE_KEYGUARD
RemoveWindowFlag(WindowFlag::WINDOW_FLAG_NEED_AVOID);
SetWindowMode(WindowMode::WINDOW_MODE_FULLSCREEN);

层级则是由 WindowType 的 Priority 值与类型共同决定,同类型取值越大层级越高,WindowType 的 Priority 定义位于 foundation\windowmanager\wmserver\include\window_zorder_policy.h 中,如:

  • WINDOW_TYPE_WALLPAPER = 0

  • WINDOW_TYPE_DESKTOP = 1

  • WINDOW_TYPE_APP_MAIN_WINDOW = 0

  • WINDOW_TYPE_APP_SUB_WINDOW = 1

  • WINDOW_TYPE_STATUS_BAR = 110

  • WINDOW_TYPE_KEYGUARD = 114

  • WINDOW_TYPE_BOOT_ANIMATION = 117
    WindowType 的类型则有三种:

  • BelowApp 位于底层,如桌面、壁纸等

  • App 位于中间,如应用主窗口、子窗口

  • AboveApp 位于上方࿰

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值