周耀颖
OpenHarmony图形SIG成员
华为技术有限公司图形专家
一、什么是窗口系统
窗口系统的作用,是提供一种机制,在同一块物理屏幕上使多个应用界面能够显示和交互。窗口作为应用的界面显示容器,各应用程序的开发者只需要实现被分配部分的显示区域内的交互界面即可,窗口系统会将这些交互界面组织成终用户见到的形态。对应用开发者而言,窗口系统提供了界面显示和交互能力的抽象;对用户而言,窗口系统提供了控制应用界面的方式;对整个操作系统而言,窗口系统提供了不同应用显示界面的组织管理逻辑。
二、为什么我们需要多窗口能力
对个人办公电脑这样的生产力设备而言,用户需要同时显示多个应用以提升办公效率,并且用户已经十分习惯了多个窗口层叠排布的组织形式,这也是主流桌面系统都在采用的窗口形式。对移动终端而言,实际上大部分时候用户仍然在使用多窗口,比如在 OpenAtom OpenHarmony(以下简称“OpenHarmony”)中,状态栏、导航栏、壁纸也是独立窗口,当用户在桌面上时实际上已经存在 4 个窗口了。使用普通应用时的多窗口场景则包含分屏模式以及悬浮窗功能。对某些特定场景而言,多窗口功能也是十分重要的,例如车机在导航场景时,如果还需要进行其他任务,就需要进入分屏模式。
三、OpenHarmony多窗口框架介绍
对 OpenHarmony 来说,一个明显的挑战是 OpenHarmony 所面向的设备形态是不确定的,从几百兆内存的嵌入式设备,到个人办公设备,都有可能在 OpenHarmony 需要支持的设备范围之内,而这些设备对多窗口的诉求差距较大,因此 OpenHarmony 窗口框架的目标是提供构建这些设备图形界面所需要的能力,但又尽可能保持足够的灵活性,允许系统进行策略配置或者二次开发来达成各自不同的诉求。1. OpenHarmony窗口框架职责介绍
在 OpenHarmony 中,窗口系统主要负责以下职责:- 提供应用和系统显示界面的窗口抽象:
- 组织不同窗口的显示关系,包括叠加层级和位置属性:
窗口系统维护不同窗口的位置属性。窗口系统负责给不同类型窗口定义默认的位置和大小,并根据应用层对于窗口位置和大小的偏好设定进行实际调整。不同的窗口类型有不同的默认位置和大小。例如,导航栏、音量条、壁纸等系统窗口均有各自固定的显示位置和窗口大小,而应用窗口的显示位置和显示大小则可以根据窗口显示模式和用户操作在一定范围内调整。
- 设置窗口装饰:
- 设置窗口动画:
- 指导输入事件分发:
- 组织窗口内容的显示:
2. OpenHarmony窗口类型定义
OpenHarmony 的窗口分为系统窗口和应用窗口两个类别,而应用窗口又分为应用主窗口和应用子窗口两种类型。- 系统窗口
系统窗口可以被系统应用直接添加、移除、改变大小,系统应用的直接操作给予系统应用足够的灵活度应对不同产品和 UI 设计的变更。
- 应用主窗口
- 应用辅助窗口
3. OpenHarmony应用窗口模式
应用窗口模式指的是应用主窗口的显示方式,这也是大部分用户所理解的“多窗口能力”。OpenHarmony 3.1 Release 中,支持以下三种应用窗口模式:全屏、分屏、自由窗口- 全屏模式
1. 全屏窗口默认情况下铺满状态栏导航栏之外的整个屏幕区域(见沉浸式章节)
2. 同一时间内,每个屏幕上仅存在一个活动状态的全屏窗口,新的全屏窗口被启动,旧的全屏窗口默认被切换到后台(而不是被遮挡)
- 分屏模式
1. 分屏窗口默认占据屏幕的某个部分,OpenHarmony 3.1 Release 中,支持二分屏能力;
2. 两个应用分屏窗口具有分界线,用户可以通过拖拽分界线同时调整两个部分的窗口尺寸。
- 自由窗口模式
1. 自由窗口的大小和位置可自由改变;
2. 同一个屏幕上可以同时显示多个自由窗口,它们按照打开顺序或者获取焦点的顺序在 Z 轴排布;
3. 自由窗口被点击或触摸将导致自由窗口的 Z 轴高度提升,并获取焦点。
4. OpenHarmony沉浸式能力
沉浸式能力,指的是对状态栏、导航栏等系统窗口进行控制,从而使用户获得佳设备使用体验的能力。状态栏和导航栏是独立的窗口,它们由特定的系统应用(通常是 System UI)进行添加,状态栏和导航栏所承载的内容和功能不在窗口系统中展开,这里仅表述该窗口与应用的窗口相关的行为。在默认情况下,全屏应用和分屏应用使用的屏幕区域为除去状态栏导航栏外的可用区域。为了让应用能尽量使用屏幕的显示区域,应用可以通过沉浸式接口将状态栏导航栏隐藏,即占据全屏大小的应用的窗口大小与屏幕大小一致,分屏的应用的窗口大小则按比例分割屏幕大小。这在进行全屏播放视频等场景时是非常常用的。
除了隐藏状态栏、导航栏外,还可以将应用的布局设置到状态栏导航栏的下方,这样应用就可以作为半透明状态栏导航栏的背景存在,使用户获得更好的体验。
应用也可以独立设置(https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#setsystembarproperties)状态栏导航栏的文字颜色和背景颜色,这样就可以使得应用显示时系统整体的界面风格统一。
以上是对OpenHarmony窗口管理框架的简单介绍。OpenHarmony 窗口管理框架和多窗口能力还在不断持续的开发演进中。对 OpenHarmony 窗口框架感兴趣的小伙伴,可以从以下链接获取窗口管理代码进行深入了解:https://gitee.com/openharmony/windowmanager。也希望更多开发者一起加入进来,与OpenHarmony共同成长。
有兴趣进行 OpenHarmony 应用开发的小伙伴,也可以通过以下链接了解 OpenHarmony 的窗口管理相关接口:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md。