本页面详细介绍了与窗口化模式相关的功能和测试场景。
在 Android 17 及更高版本中,您可以启用 按显示屏 窗口化模式。如需了解详情,请参阅 启用窗口化模式。
桌面功能
本部分介绍了与窗口化模式相关的关键功能和配置。
启用任务限制
如需配置窗口化模式下支持的任务数上限,请执行以下操作:
- 启用窗口化模式。
在
config.xml中将配置叠加层标志config_maxDesktopWindowingActiveTasks设置为支持的任务数上限。如需支持的任务数不受限制,请将该标志设置为默认值0:<integer name="config_maxDesktopWindowingActiveTasks">4</integer>
浏览器专用功能
Android 16 引入了两项浏览器专用功能:可自定义的标题 边衬区和应用实例管理。本部分介绍了用于验证浏览器兼容性的测试场景。原始设备制造商 (OEM) 必须验证功能实现是否按预期运行。
可自定义标题边衬区的测试用例
以下测试用例用于验证浏览器与可自定义标题边衬区的兼容性:
- 界面互动性: 验证浏览器的标题栏界面在所有窗口配置(自由窗口、分屏和全屏)中是否保持完全互动。
- 系统图标间距: 确认浏览器界面不会在系统图标下方绘制。
- 前景色应用: 验证是否根据浏览器的主题将正确的前景色应用于应用标题中的系统图标。 当浏览器的主题与系统主题不同时,这一点尤为重要。
- 窗口拖动: 验证是否可以通过长按标签栏的空白区域中的任意位置来拖动自由窗口。
- 调整大小时的标签页可见性: 测试标签页是否根据窗口的宽度显示或隐藏,以保持最佳可用性。
具有可拖动手势行为的应用实例管理的测试用例
以下测试用例用于验证浏览器与应用实例管理的兼容性:
- 创建新窗口: 确认将标签页从标签栏拖动到空白区域会创建一个包含该标签页的新浏览器窗口。
- 最后一个标签页(单个实例)没有新窗口: 如果仅打开了一个浏览器实例,请验证拖动该窗口中的最后一个标签页是否不会创建新窗口。
桌面优先和触控优先行为模式
窗口化模式旨在支持各种设备规格,除了独立平板电脑外,还包括翻盖式设备以及连接了外部显示屏的设备。由于不同的设备规格对互动有不同的用户期望,通常由主要输入法(触控或键盘和鼠标)决定,因此窗口化模式采用两种不同的行为模式:
- 桌面优先模式: 提供针对键盘和触控板优化的体验,系统优先使用自由窗口模式。此模式适用于类似笔记本电脑的配置。
- 触控优先模式: 提供针对触控优化的体验,系统优先使用全屏窗口模式。此模式是独立平板电脑的默认模式。
这些模式不是单独的桌面环境,而是按显示屏状态,用于决定默认界面行为。
行为差异
下表总结了桌面优先模式和触控优先模式之间的主要界面和功能差异:
| 功能 | 触控优先模式 | 桌面优先模式 |
|---|---|---|
| 默认启动 | 窗口以全屏模式启动,除非自由窗口已位于顶部。 | 窗口以自由窗口模式启动,除非全屏窗口已位于顶部。 |
| 任务栏类型 | 在全屏模式下使用临时任务栏 (仅显示固定的应用)。 | 始终使用桌面任务栏 (显示固定的应用和打开的应用)。 |
| 重新聚焦 | 窗口根据当前显示模式重新激活(例如,如果显示屏处于窗口化模式,则以自由窗口模式重新激活)。 | 窗口根据自身保存的窗口模式重新激活(例如,全屏窗口始终以全屏模式恢复)。 |
| 拖动到顶部 | 将窗口拖动到顶部边缘会进入全屏 模式。 | 将窗口拖动到顶部边缘会进入最大化 状态。 |
| 窗口控件 | 使用应用句柄进行全屏控制。 | 使用悬停菜单进行全屏控制。 |
桌面优先模式是一种按显示屏状态,这意味着设备可以同时托管触控优先内部显示屏和桌面优先外部显示屏。
切换触发器
系统会评估多个因素,以确定显示屏的适当模式:
- 输入外设: 如果同时连接并启用了键盘和触控板或鼠标,则显示屏会切换到桌面优先模式。
- 外部显示屏: 连接的外部显示屏通常默认为桌面优先模式,除非它们镜像内部显示屏。
- 设备姿态: 对于可转换设备,模式可以根据物理方向切换(例如,当键盘向后翻转时切换到触控优先模式)。
技术实现
此状态的“真实来源”是显示屏窗口模式,具体而言是显示屏的 TaskDisplayArea 的窗口模式。Shell 和启动器组件可以通过 DisplayAreaInfo 或显示屏上下文的 WindowConfiguration 访问此状态。
按显示屏窗口化模式
在 Android 17 及更高版本中,对于可以托管任务的显示屏(如 Display.canHostTasks 所定义),WindowManager (WM) 会根据原始设备制造商 (OEM) 可以配置的条件来确定是否符合窗口化模式的条件。默认情况下,WM 会检查以下条件:
- 自由窗口模式支持
- 已启用系统装饰
- 已启用默认显示屏或内容模式切换
当显示屏的资格发生变化时,WM 会调用 IDisplayWindowListener.onDesktopModeEligibleChanged。隐藏的 API WindowManager.isEligibleForDesktopMode 会返回显示屏是否符合窗口化模式的条件。WM Shell 会拦截此调用,如果显示屏符合条件,则会决定显示屏是否支持窗口化模式并分配必要的资源。