使用可伸缩界面在车载设备中打造复杂、动态且多面板的用户体验。可伸缩界面:
提供灵活的窗口系统。
最大限度地降低了兼容性测试套件 (CTS) 为用户界面实现所带来的工程风险、成本和复杂性。
可伸缩界面支持各种需要动态窗口排列的现代车载信息娱乐系统 (IVI) 设计,同时还可缩小以支持采用静态窗口排列的传统体验。
Android 17 引入了以下特定于高级窗口的功能:
示例体验
可伸缩的界面支持无限多种窗口配置。以下是为测试可伸缩界面而创建的几个示例场景:
地图背景,带有浮动应用
地图背景配置,其他应用浮动在顶部。
应用后台
具有浮动面板的应用背景配置。
其他应用下的已固定应用
一个固定的应用(例如 widget 容器),其他应用在其上启动。
条件浮动面板
一种有条件的浮动面板,仅在满足特定条件时显示,例如在播放媒体时或触发提醒时。
让固定的应用更靠近驾驶员
固定应用的位置更靠近驾驶员。
分屏布局
分屏布局,左右并排显示两个应用。
互动式分屏
一种支持动态调整大小的交互式分屏布局。
适用于大屏设备的多锚点布局
一种专为大屏设备设计的多锚点布局。
主屏幕应用轮播界面
一种包含应用轮播界面的主屏幕布局。
福利和合规性
可缩放界面的优势包括:
降低测试风险:该框架已预先获得认证,并符合 CTS 要求,从而消除了在计划周期后期出现测试失败的主要风险。可扩缩的界面可节省数月的工程设计工作量,并加快合规流程。
设计灵活性更高:能够重现许多复杂的现有汽车窗格模型。可扩缩的界面支持大胆且高度差异化的设计。
降低了实现复杂性:抽象为高级别、配置驱动的 XML 模型,降低了自定义窗口化逻辑的门槛。
性能更佳:可扩缩的界面在高性能窗口化基础上运行,与标准 Android 完全集成。转换流程顺畅,可直接进行优化。
核心构建块
可扩缩的界面可最大限度地减少对 OEM 特定代码的需求,简化更新流程,并通过消除陷阱和减少认证问题来降低启动风险。
这种基于 XML 的方法可解决在 AAOS 中管理复杂窗口系统时遇到的常见挑战,例如精确定位、Z 顺序冲突和应用焦点。
可伸缩界面提供这些核心构建块。
面板
面板是屏幕上的基本矩形容器。每个面板都映射到一个专用的 root 任务,以便进行独立管理。面板可以托管应用任务 (TaskPanel) 或基于视图的内容,例如 widget (DecorPanel)。如需了解详情,请参阅配置面板。
变体
变体定义了面板的特定视觉状态,并包含 bounds(位置和大小)、visibility、layer(Z 顺序)和 corner 半径等属性。单个面板可以有多种变体,例如 opened、closed 或 minimized。如需了解详情,请参阅使用变体设计视觉状态。
过渡
过渡定义了面板如何从当前状态 fromVariant 移动到新状态 toVariant。Event 会触发过渡,该过渡定义了面板在状态变化期间使用的动画。面板应从当前状态移动到 toVariant。对于同步,核心窗口管理器会为所有过渡设置动画效果并协调所有过渡。
- 事件:用于触发界面更改的触发器。OEM 或系统可以预定义触发器。例如,
_System_OnHomeEvent、_System_TaskOpenEvent或自定义导航按钮按压。
例如,可伸缩界面使用事件来触发过渡。这些过渡效果可将面板从一种变体动画过渡到另一种变体,以显示界面中的动态变化。可伸缩界面会将这些更改告知其他系统应用,以便根据需要调整内容。通过在 XML 中定义界面关系,您可以:
指定复杂的界面行为:定义复杂的界面互动。
安排窗口系统:控制窗口位置和分层。
实现视觉主题:应用一致的品牌推广和美学风格。
降低代码复杂性:尽量减少对大量自定义代码开发的需求。
如需了解详情,请参阅配置过渡。
系统界面按钮
除了触发 intent 之外,CarSystemBarButtons 还可以使用 event、selectedEvent 和 unselectedEvent 属性在点按时触发可伸缩界面事件。
event 描述了点按按钮时要触发的事件。如果需要更精细地控制事件,请使用 selectedEvent 和 unselectedEvent 属性分别指定在选中或取消选中按钮时触发的事件。
何时实现系统界面
本部分介绍了可伸缩界面的最佳使用方式。
创建持久性多面板布局
打造多区域体验,让屏幕的不同区域永久专用于特定功能。例如,专用媒体控件、气候控制条或全屏地图。
TaskPanels 用于主要应用(例如导航),DecorPanels 用于必须放置在 TaskPanels 之间的视图形式的界面元素。
实现动态首页场景
实现一个由多个并发可见的交互式应用面板组成的首页场景。例如,地图、媒体播放器和应用网格。
如需将所有相关面板过渡到其 opened 或 default 主页变体,请配置 _System_HomeEvent。
应用情境叠加层
放置非应用界面元素,例如可与应用任务协调动画处理的情境 widget、自定义品牌推广元素和拖动条。
对于所有纯装饰性元素或 widget 托管元素,请使用 DecorPanels。如果 widget 托管的是功能完善、可启动的应用,则 Panel > TaskPanel 是最佳选择。当分层必须与 TaskPanel 分层同步时,请为基于视图的界面元素使用 DecorPanels。
设计复杂的面板互动
设计高级用户驱动的操作,例如根据主显示屏内容动态调整应用面板大小或调整仪表盘视图。
定义自定义 Events 以触发特定的非系统标准 Transitions。
将 IVI 布局扩展到统一数字座舱
可伸缩的界面可在 SDV IVI 虚拟机中的主信息娱乐显示屏 (display0) 上管理多面板窗口 (TaskPanel 和 DecorPanel)。您可以将可伸缩界面与显示屏安全功能搭配使用,以便在主显示屏布局发生变化时更新仪表板视图:
- 可伸缩的界面操作(
SDV IVI虚拟机):当主显示屏上的面板状态发生变化时,可伸缩的界面可以使用xml/scalable_ui_actions.xml中的<Action>发送 intent,以通知集群组件布局或模式发生变化。如需了解详情,请参阅配置操作。 - DriverUI(
SDV IVI虚拟机):在仪表板显示屏 (display1) 上作为由ClusterHomeManager启动并使用automotive-design-compose构建的系统应用运行。DriverUI渲染非安全集群内容(例如地图、媒体和电话),并处理来自 IVI 系统的状态更新。 - IVI 上的 SDV 网关(
SDV IVI虚拟机):DriverUI使用SDV Gateway Client通过 gRPC (driverui.proto) 连接到高可用性渲染器 (HAR)。DriverUI发送集群状态更新(例如布局变体、主题令牌和语言区域设置更改),以及定期发送心跳消息。 HAR和安全监控器 (SDV MediaVM):在单独的SDV MediaVM 中运行,以呈现安全关键元素(例如速度、档位、指示灯、蜂鸣声和后视摄像头 Feed)。虽然HAR会从DriverUI接收心跳信号,但它会保持 Android 集群区域的透明度,以便DriverUI内容与HAR安全叠加层融合。如果SDV IVI正在启动或不可用,HAR会显示回退占位符。- OEM 配置:如需设置此流程,请在
SDV IVI的xml/scalable_ui_actions.xml中配置<Event>触发器和<Action>intent,更新 Safety 设计工具链的 Figma 设计文件和Config.json信号映射,并为目标硬件实现 HAR 平台抽象层 (PAL)。