配置面板

面板用于描述其所占区域的属性,并充当应用容器。您可以使用 XML 配置来定义面板,从而以灵活且无需代码的方式自定义界面。为了管理实例和状态,系统会跟踪已定义的面板。

面板列表

系统界面从名为 window_states 的数组资源加载其面板的定义。此资源数组指向 XML 文件,其中定义了各个面板配置。这种集中式方法意味着,由可伸缩界面管理的面板会按预期加载,并可供系统使用。

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <array name="window_states">
       <item>@xml/app_panel</item>
       <item>@xml/back_panel</item>
       ...
   </array>
</resources>

面板定义

可伸缩界面框架中的每个面板都使用名为 <TaskPanel> 的 XML 标记进行定义,该标记用于描述应用容器的属性。系统界面会加载这些面板定义,并跟踪面板,直到加载另一个配置。

例如,因旋转或明确的系统请求而导致的配置变更。<TaskPanel> 是一个基础组件,用于通过可配置的界面组件打造自定义体验。

XML 属性

<TaskPanel> 标记可以包含以下属性,您可以使用这些属性来定义状态和过渡。

属性 状态 说明
id 强制 指定面板的唯一标识符。此属性用于从 PanelPool 中检索面板,并在系统内管理其状态。
role 强制 定义了系统中面板的用途或功能。该值可以是指向字符串资源、组件名称的字符串数组或布局 ID。例如,它可以定义应始终显示在面板上的持久性 activity,或要扩充的布局。
defaultVariant 可选 指定面板在加载时应最初采用的变体的 ID。如果未指定,系统可以使用第一个定义的变体作为默认变体。
displayId 可选 指定面板要显示到的显示屏的 ID。
defaultLayer 可选 如果变体未明确定义图层,则可以为面板的变体指定默认 Z 顺序。
controller 可选,
可能会发生变化

引用定义了面板专用控制器(通常是 XML ID)的资源,该控制器允许存储配置值并将其传递给自定义面板控制器。

这些控制器应实现 com.android.car.scalableui.panel.TaskPanelController 接口。 这些控制器的常见应用场景是在面板上定义灵活的运行时任务分配。

XML 子元素

<TaskPanel> 标记可以包含以下属性来定义特征和默认行为,

属性 说明
<Variant>

嵌套标记用于描述面板在任何给定时间的特定视觉配置。一个面板可以有多个变体,每个变体都有一个唯一 ID。

每个变体都定义了相应配置的边界、可见性、图层、Alpha、圆角半径和边衬区等属性。变体还可以从变体继承属性。

<KeyFrameVariant> <Variant> 的扩展功能允许根据连续的分数值(0 到 1)在不同变体之间插值视觉属性,并用于平滑动态过渡,例如在拖动操作期间,当面板的状态取决于连续输入(例如拖动量)时。
<Transitions>

嵌套标记包含一组 <Transition> 定义,用于描述界面如何在不同变体之间进行动画处理。

每个 <Transition> 都定义了 fromto 变体、触发它的事件,并且可以选择性地指定要用于动画的自定义 Animator,以及时长和插值器。

示例代码

<Panel id="@+id/panelId"
        role="@array/roleValue"
        defaultVariant="@id/closed"
        displayId="0" >

 <Variant id="@+id/base">
        <Bounds left="0" top="0" width="100%" height="100%"/>
 </Variant>

<Variant id="@+id/opened" parent="@id/base">
    <Visibility isVisible="true"/>
</Variant>
<Variant id="@+id/closed"  parent="@id/base">
    <Visibility isVisible="false"/>
</Variant>

<Transitions>
    <Transition fromVariant="@id/closed"
                toVariant="@id/opened"
                onEvent="open_event"/>
        <Event id="_System_TaskOpenEvent" panelId="@id/panelId" />
    </Transition>
</Transitions>
</Panel>