0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony多窗口框架介绍

OpenAtom OpenHarmony 来源:OpenAtom OpenHarmony 作者:OpenAtom OpenHarmony 2022-05-11 10:19 次阅读

什么是窗口系统

窗口系统的作用,是提供一种机制,在同一块物理屏幕上使多个应用界面能够显示和交互。窗口作为应用的界面显示容器,各应用程序的开发者只需要实现被分配部分的显示区域内的交互界面即可,窗口系统会将这些交互界面组织成最终用户见到的形态。 对应用开发者而言,窗口系统提供了界面显示和交互能力的抽象;对用户而言,窗口系统提供了控制应用界面的方式;对整个操作系统而言,窗口系统提供了不同应用显示界面的组织管理逻辑。

为什么我们需要多窗口能力

对个人办公电脑这样的生产力设备而言,用户需要同时显示多个应用以提升办公效率,并且用户已经十分习惯了多个窗口层叠排布的组织形式,这也是主流桌面系统都在采用的窗口形式。

对移动终端而言,实际上大部分时候用户仍然在使用多窗口,比如在 OpenAtom OpenHarmony(以下简称“OpenHarmony”)中,状态栏、导航栏、壁纸也是独立窗口,当用户在桌面上时实际上已经存在 4 个窗口了。使用普通应用时的多窗口场景则包含分屏模式以及悬浮窗功能。对某些特定场景而言,多窗口功能也是十分重要的,例如车机在导航场景时,如果还需要进行其他任务,就需要进入分屏模式。

OpenHarmony多窗口框架介绍

对 OpenHarmony 来说,一个明显的挑战是 OpenHarmony 所面向的设备形态是不确定的,从几百兆内存的嵌入式设备,到个人办公设备,都有可能在 OpenHarmony 需要支持的设备范围之内,而这些设备对多窗口的诉求差距较大,因此 OpenHarmony 窗口框架的目标是提供构建这些设备图形界面所需要的能力,但又尽可能保持足够的灵活性,允许系统进行策略配置或者二次开发来达成各自不同的诉求。

OpenHarmony窗口框架职责介绍

在 OpenHarmony 中,窗口系统主要负责以下职责:

•提供应用和系统显示界面的窗口抽象:

为了将图形界面显示在屏幕上,应用和系统需要向窗口系统申请窗口对象,这通常代表了屏幕上一块矩形区域,具有位置、宽高和叠加层次(Z 轴)属性。同时,窗口对象也负责加载界面中 UI 框架的根节点,应用程序的 UI 界面就通过这个根节点在窗口中加载显示。

•组织不同窗口的显示关系,包括叠加层级和位置属性:

窗口系统维护不同窗口间的叠加层次。应用和系统的窗口具有多种类型,不同类型的窗口具有不同的叠加层次(Z 轴高度)。窗口系统负责给不同类型的窗口定义默认的层次范围,并根据用户操作更新窗口层次,即用户的操作也可以改变用户窗口的叠加层次。例如,通过点击或者触摸操作,用户可以将选中的窗口在用户界面的前台展示。

窗口系统维护不同窗口的位置属性。窗口系统负责给不同类型窗口定义默认的位置和大小,并根据应用层对于窗口位置和大小的偏好设定进行实际调整。不同的窗口类型有不同的默认位置和大小。例如,导航栏、音量条、壁纸等系统窗口均有各自固定的显示位置和窗口大小,而应用窗口的显示位置和显示大小则可以根据窗口显示模式和用户操作在一定范围内调整。

•设置窗口装饰:

在自由窗口等模式中,窗口系统会通知 ArkUI 在应用窗口外部增加窗口装饰。窗口装饰通常包含对窗口进行最大化、最小化及关闭按钮等界面元素,方便用户进行操作。

f0a4a342-cc74-11ec-bce3-dac502259ad0.jpg

•设置窗口动画:

在窗口显示、隐藏、和窗口间切换时,通常会有一组动画效果使得整个交互过程更加连贯流畅。窗口系统负责设置窗口的动画参数,完成动画效果。

•指导输入事件分发:

输入事件通常可以分为指向性输入(如触摸事件、鼠标事件)和非指向性输入(如按键)。指向性输入事件通常与显示屏的某个坐标关联,事件分发时需要根据当前窗口系统的状态,将事件分发给在这个位置显示的窗口;非指向性输入事件则通常与当前的焦点窗口关联,事件分发时需要根据当前的焦点窗口,将事件分发给当前的窗口。

f0cc5c52-cc74-11ec-bce3-dac502259ad0.jpg

•组织窗口内容的显示:

各应用输出的显示内容,最终会被组合成一张显示画面输出给物理屏幕,而窗口系统负责向 RenderServer 提供每个显示内容的位置、大小、层级,使得每个界面被正确组合。

f0e5f1b2-cc74-11ec-bce3-dac502259ad0.jpg

OpenHarmony窗口类型定义

OpenHarmony 的窗口分为系统窗口和应用窗口两个类别,而应用窗口又分为应用主窗口和应用子窗口两种类型。

系统窗口

系统窗口指完成系统特定功能的窗口类型。通常来说,系统窗口不允许三方应用创建,也不是由界面 Ability 默认创建,而是由系统应用手动添加的。

系统窗口可以被系统应用直接添加、移除、改变大小,系统应用的直接操作给予系统应用足够的灵活度应对不同产品和 UI 设计的变更。

应用主窗口

应用主窗口是由界面 Ability 默认为应用创建、加载的,用于显示应用界面的窗口类型。应用主窗口会在任务管理界面中被显示。

应用辅助窗口

应用辅助窗口是基于应用手动创建的,用于显示应用的弹窗、悬浮窗口等内容的窗口。应用辅助窗口不会在任务管理界面中被显示。在应用获取权限后,允许应用辅助窗口在应用主窗口不再显示后继续在前台悬浮显示

OpenHarmony应用窗口模式

应用窗口模式指的是应用主窗口的显示方式,这也是大部分用户所理解的“多窗口能力”。OpenHarmony 3.1 Release 中,支持以下三种应用窗口模式:全屏、分屏、自由窗口

全屏模式

全屏窗口是手持设备和嵌入设备中最常用的窗口模式,OpenHarmony 中的全屏模式具有以下特征:

1. 全屏窗口默认情况下铺满状态栏导航栏之外的整个屏幕区域(见沉浸式章节)

2.同一时间内,每个屏幕上仅存在一个活动状态的全屏窗口,新的全屏窗口被启动,旧的全屏窗口默认被切换到后台(而不是被遮挡)

f116fdde-cc74-11ec-bce3-dac502259ad0.jpg

分屏模式

分屏模式主要在平板和个人电脑中使用,OpenHarmony 中的分屏模式具有以下特征:

1. 分屏窗口默认占据屏幕的某个部分,OpenHarmony 3.1 Release 中,支持二分屏能力;

2. 两个应用分屏窗口具有分界线,用户可以通过拖拽分界线同时调整两个部分的窗口尺寸。

f12c4eb4-cc74-11ec-bce3-dac502259ad0.jpg

自由窗口模式

自由窗口是个人办公设备的标志性多窗口形态,OpenHarmony 中的自由窗口模式具有以下特征:

1. 自由窗口的大小和位置可自由改变;

2. 同一个屏幕上可以同时显示多个自由窗口,它们按照打开顺序或者获取焦点的顺序在 Z 轴排布;

3. 自由窗口被点击或触摸将导致自由窗口的 Z 轴高度提升,并获取焦点。

f1410174-cc74-11ec-bce3-dac502259ad0.jpg

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。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5019

    文章

    18505

    浏览量

    293530
  • 应用程序
    +关注

    关注

    37

    文章

    3172

    浏览量

    57099
  • OpenHarmony
    +关注

    关注

    24

    文章

    3485

    浏览量

    15440

原文标题:OpenHarmony 3.1 Release版本关键特性解析——构建OpenHarmony窗口框架

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    鸿蒙OS开发:典型页面场景【一次开发,多端部署】实战(音乐专辑页2)

    本示例使用[一次开发多端部署]中介绍的自适应布局能力和响应式布局能力进行多设备(或多窗口尺寸)适配,保证应用在不同设备或不同窗口尺寸下可以正常显示。
    的头像 发表于 05-25 16:47 1746次阅读
    鸿蒙OS开发:典型页面场景【一次开发,多端部署】实战(音乐专辑页2)

    OpenHarmony实战开发-如何实现窗口开发概述

    操作系统而言,窗口模块提供了不同应用界面的组织管理逻辑。 窗口模块的用途 在OpenHarmony中,窗口模块主要负责以下职责: 提供应用和系统界面的
    发表于 05-06 14:29

    介绍一种OpenAtom OpenHarmony轻量系统适配方案

    本文在不改变原有系统基础框架的基础上, 介绍了一种OpenAtom OpenHarmony(以下简称“OpenHarmony”)轻量系统适配方案。
    的头像 发表于 03-05 09:24 698次阅读
    <b class='flag-5'>介绍</b>一种OpenAtom <b class='flag-5'>OpenHarmony</b>轻量系统适配方案

    OpenHarmony 之 NAPI 框架介绍

    环境中的 JS 变量与方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下简称 “OpenHarmony”)应用层基于 javascript 语言开发,而系统
    的头像 发表于 02-01 17:34 426次阅读
    <b class='flag-5'>OpenHarmony</b> 之 NAPI <b class='flag-5'>框架</b><b class='flag-5'>介绍</b>

    教程分享!OpenHarmony之NAPI框架介绍

    是 C++语言实现的,这些接口可以帮助 C++代码创建 JS 变量,或访问 JavaScript 运行环境中的 JS 变量与方法。 OpenHarmony 中的 NAPI OpenAtom OpenHarmony(以下简称“OpenHa
    的头像 发表于 11-30 12:15 869次阅读
    教程分享!<b class='flag-5'>OpenHarmony</b>之NAPI<b class='flag-5'>框架</b><b class='flag-5'>介绍</b>

    OpenHarmony之NAPI框架介绍

    的 NAPI OpenAtom OpenHarmony(以下简称“OpenHarmony”)应用层基于 javascript 语言开发,而系统框架层则基于 C++语言。它们之间需要一个桥梁来实现两种语言代码之间
    发表于 11-23 15:36

    OpenHarmony技术大会 | 编程语言及开发框架分论坛嘉宾金句

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony 原文标题:OpenHarmony技术大会 | 编程语言及开发框架分论坛嘉宾金句 文章出处:
    的头像 发表于 11-11 21:15 408次阅读

    【开源三方库】Easyui:基于OpenAtom OpenHarmony ArkUI深度定制的组件框架

    量、可靠的移动端组件库,它是对OpenAtom OpenHarmony(以下简称“OpenHarmony”) ArkUI进行深度定制的组件框架。Easyui可扩展性较强,可以基于源码进行二次开发,修改
    的头像 发表于 11-09 10:55 446次阅读
    【开源三方库】Easyui:基于OpenAtom <b class='flag-5'>OpenHarmony</b> ArkUI深度定制的组件<b class='flag-5'>框架</b>

    议程直击 | 第二届OpenHarmony技术大会——编程语言及开发框架分论坛

    点击蓝字 ╳ 关注我们 开源项目 OpenHarmony 是每个人的 OpenHarmony 原文标题:议程直击 | 第二届OpenHarmony技术大会——编程语言及开发框架分论坛
    的头像 发表于 11-01 16:10 279次阅读
    议程直击 | 第二届<b class='flag-5'>OpenHarmony</b>技术大会——编程语言及开发<b class='flag-5'>框架</b>分论坛

    怎么做Labview多窗口设计并且美观

    Labview多窗口窗口制作
    发表于 10-25 09:09

    OpenHarmony应用模型的构成要素与Stage优势

    ,便捷实现跨端迁移。 在多端协同场景下,应用组件具备组件间通信的RPC调用能力,天然支持跨设备应用组件的交互。 支持多设备和多窗口形态 应用组件管理和窗口管理在架构层面解耦: 便于系统对应用组件进行裁剪
    发表于 09-26 16:48

    Qt For OpenHarmony

    窗口OpenGL渲染上下文)以及Clipboard(系统剪切板)。 Qt Widget For OpenHarmony渲染流程:基于Qt框架自成体系的图形框架和事件系统,在
    发表于 09-15 15:39

    OpenHarmony社区运营报告(2023年8月)

    ”)发布了Beta2版本。OpenHarmony 4.0 Beta2在系统能力、应用框架、分布式通信、媒体功能、安全性等方面进行了全面升级。其中,ArkUI增强了界面组件能力,应用框架支持了ArkTS卡片
    的头像 发表于 09-11 21:10 498次阅读
    <b class='flag-5'>OpenHarmony</b>社区运营报告(2023年8月)

    开源图形驱动在OpenHarmony上的使用和落地

    OpenHarmony富设备的内核是基于Linux的,故首先介绍下Linux开源驱动的整体架构。整个驱动的架构可以分为2D和3D两个部分,2D部分的比较老的框架是基于X11,而比较新的框架
    发表于 08-31 18:07

    深度学习cntk框架介绍

    深度学习cntk框架介绍  深度学习是最近几年来非常热门的话题,它正在彻底改变我们生活和工作的方式。随着越来越多的创新和发展,人工智能和机器学习的应用范围正在大大扩展。而对于深度学习这个领域来说
    的头像 发表于 08-17 16:11 1053次阅读