目录

窗口模式简介

场景介绍

窗口模式指窗口在设备屏幕上的显示状态,包括全屏、最大化、最小化、自由悬浮窗口和分屏多种模式,是单个窗口的属性。

通过合理配置和使用窗口模式,应用可以更好地适配不同设备形态和用户交互场景,提供更优质的多窗口体验。

智慧多窗是一个多种窗口模式组合使用的实践范例,它允许用户在同一时间、同一屏幕上以悬浮窗、分屏或全景多窗的方式同时运行多个应用窗口,从而实现多任务处理。

窗口模式能力支持用户同时使用多个应用窗口,这种能力在自由窗口状态和非自由窗口状态下存在差异:

可通过以下章节了解窗口模式基础能力、自由窗口适配等详细内容。

窗口模式WindowStatusType

窗口模式通过WindowStatusType枚举来描述,该枚举定义了应用窗口在不同场景下的显示状态。开发者可以根据应用需求选择合适的窗口模式,或动态监听窗口模式变化以进行相应的适配处理。下文将详细介绍各个窗口模式的特点、窗口模式变化的感知以及窗口模式策略的配置方式。

除了非自由窗口状态下固定支持主窗口的FULL_SCREEN模式外,其他各种窗口模式需提前配置相应的支持策略后才可触发。

[h2]FULL_SCREEN

全屏模式是指应用窗口铺满整个屏幕的显示状态。

特点:

适用场景:

触发方式:

[h2]MAXIMIZE

最大化模式是指应用窗口在自由窗口状态下铺满整个屏幕,但保留dock栏、状态栏和标题栏的显示状态。

特点:

适用场景:

自由窗口状态下需要全屏显示但保持dock栏、状态栏和标题栏可见。

触发方式:

  • 应用子窗口仅在自由窗口状态下支持FULL_SCREEN与MAXIMIZE模式,且需要在创建子窗时将maximizeSupported参数配置为true;或者通过setSupportedWindowModes()配置支持。

  • FULL_SCREEN与MAXIMIZE的主要差异:

    • FULL_SCREEN:窗口铺满整个屏幕;在自由窗口状态下,无dock栏、状态栏和标题栏显示;在非自由窗口状态下,无dock栏和标题栏显示。

    • MAXIMIZE:窗口铺满整个屏幕,有dock栏、状态栏和标题栏显示。

    • MAXIMIZE模式仅在自由窗口状态下生效。

[h2]MINIMIZE

最小化模式是指应用窗口缩小到任务栏或dock栏,不在屏幕上显示内容的状态。

特点:

适用场景:

触发方式:

[h2]FLOATING

自由悬浮窗口模式是指应用窗口以自由悬浮窗口的形式显示,可以自由调整窗口的大小和位置。

在自由窗口状态下和非自由窗口状态下,自由悬浮窗口模式具有不同的特点和使用场景。

[h2]SPLIT_SCREEN

分屏模式是指应用窗口占据屏幕的某个部分,与另一个窗口同时显示的状态。当前支持应用内分屏及应用间分屏。

特点:

适用场景:

多个应用长时间并行使用的场景,如一边查看文档一边编写邮件、多应用商品比价等。

触发方式:

获取与监听窗口模式

应用可以通过查询窗口模式、监听窗口模式变化事件来感知当前窗口状态的改变,并据此进行相应的业务适配。

系统提供了以下相关查询和监听接口。

接口 功能描述 触发时机 适用场景
getWindowStatus() 获取当前应用窗口的模式 应用主动调用 需要立即获取当前窗口模式进行判断的场景,如在执行某些窗口操作前,先判断当前窗口模式,避免在不支持的窗口模式下调用相关接口。
on('windowStatusChange') 开启窗口模式变化的监听 窗口模式变化时立即触发(此时窗口属性可能还没有更新) 需要快速响应窗口模式变化,不依赖窗口属性的场景。
on('windowStatusDidChange') 开启窗口模式变化的监听 窗口模式变化且Rect属性更新完成后触发 需要在窗口模式变化后立即获取准确窗口大小和位置的场景。

定制窗口模式支持策略

应用可以通过多种方式配置窗口支持的模式,以满足不同设备和场景的需求。针对主窗、子窗窗口模式,提供了四种主要的配置方式,按优先级从高到低依次为:

优先级排序 配置方式 支持的窗口类型 生效范围
1 通过setSupportedWindowModes()接口配置 应用主窗口、应用子窗口 仅在自由窗口状态下生效
2 通过startAbility()接口配置 应用主窗口 仅在自由窗口状态下生效
3 通过module.json5配置文件中abilities标签下的metadata标签配置 应用主窗口 仅在自由窗口状态下生效
4 通过module.json5配置文件中abilities标签下的supportWindowMode属性配置 应用主窗口 均生效
  • 非自由窗口状态下只能通过module.json5配置文件中abilities标签下的supportWindowMode属性配置窗口支持模式,其他配置方式均不生效。

  • 非自由窗口状态下,应用在abilities标签下配置的supportWindowMode属性中即使未包含FULL_SCREEN,依然默认支持全屏模式显示。

  • 在自由窗口状态下,supportWindowMode中配置的FULL_SCREEN模式,表示窗口支持windowStatusType.FULL_SCREEN 和windowStatusType.MAXIMIZE两种显示模式。

  • 多设备场景下不同窗口模式的开发与实现可以参考窗口模式最佳实践。

[h2]通过setSupportedWindowModes()接口配置

支持配置的窗口模式如下所示:

配置值 模式 说明
SupportWindowMode.FULL_SCREEN 全屏模式 窗口支持全屏显示。
SupportWindowMode.SPLIT 分屏模式 主窗不支持仅配置SPLIT,需要配合FULL_SCREEN和FLOATING一起使用,子窗不支持配置SPLIT。
SupportWindowMode.FLOATING 悬浮模式 窗口支持自由悬浮形式显示。

[h2]通过startAbility()接口配置

应用调用startAbility()时可通过StartOptions中的supportWindowMode参数,指定启动时窗口支持的模式。

支持的模式值(详见bundleManager.SupportWindowMode):

配置值 模式 说明
bundleManager.SupportWindowMode.FULL_SCREEN 全屏模式 窗口支持全屏显示。
bundleManager.SupportWindowMode.SPLIT 分屏模式 窗口支持分屏显示。
bundleManager.SupportWindowMode.FLOATING 自由悬浮窗口模式 窗口支持自由悬浮形式显示。

[h2]通过module.json5配置文件中abilities标签下的metadata标签配置

通过module.json5配置文件中abilities标签下的metadata标签,可以设置窗口相关的元数据属性,包括自由多窗下的可支持窗口模式。

配置项说明:

配置项 说明 取值
name 元数据名称 "ohos.ability.window.supportWindowModeInFreeMultiWindow"
value 支持的窗口模式

字符串,可配置多种模式,每个模式之间用逗号分隔,不区分顺序,不添加空格。支持配置的模式有:

- "fullscreen":全屏模式,应用窗口铺满整个屏幕。

- "split":分屏模式。应用窗口占据屏幕的某个部分,与另一个窗口同时显示。

- "floating":自由悬浮窗口模式。应用窗口以悬浮窗口的形式显示。

[h2]通过module.json5配置文件中abilities标签下的supportWindowMode属性配置

通过module.json5配置文件中abilities标签下的supportWindowMode属性,可以指定应用支持的窗口模式。

支持的模式值:

配置值 模式 说明
"fullscreen" 全屏模式 应用窗口铺满整个屏幕。
"split" 分屏模式 应用窗口占据屏幕的某个部分,与另一个窗口同时显示。
"floating" 悬浮窗模式 应用窗口以悬浮窗口的形式显示。