設定面板

面板會說明所佔區域的屬性,並做為應用程式容器。您可以使用 XML 設定定義面板,以彈性且免程式碼的方式自訂 UI。系統會追蹤定義的面板,以管理執行個體和狀態。

面板清單

系統 UI 會從名為 window_states 的陣列資源載入面板定義。這個資源陣列會指向 XML 檔案,其中定義了個別面板設定。這種集中式做法表示,由可擴充 UI 管理的面板會依預期載入,並供系統使用。

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

面板定義

可擴充 UI 架構中的每個面板都是以名為 <TaskPanel> 的 XML 標記定義,這個標記會說明應用程式容器的屬性。系統 UI 會載入這些面板定義,並追蹤面板,直到載入其他設定為止。

例如,因旋轉或明確的系統要求而導致設定變更。<TaskPanel> 是基礎元件,可透過可設定的 UI 元件打造自訂體驗。

XML 屬性

<TaskPanel> 標記可包含這些屬性,可用於定義狀態和轉場效果。

屬性 Status 說明
id 必要 指定面板的專屬 ID。這項屬性用於從 PanelPool 擷取面板,並管理系統中的面板狀態。
role 必要 定義系統中面板的用途或功能。這個值可以參照字串資源、元件名稱的字串陣列,或版面配置 ID。舉例來說,它可以定義應一律顯示在面板上的持續性活動,或是要擴充的版面配置。
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> 定義,說明 UI 在不同變體之間應如何產生動畫效果。

每個 <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>