面板會說明所佔區域的屬性,並做為應用程式容器。您可以使用 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),可將設定值儲存及傳遞至自訂面板控制器。 這些控制器應實作 |
XML 子元素
<TaskPanel>
標記可包含這些屬性,以定義特徵和預設行為,
屬性 | 說明 |
---|---|
<Variant> |
巢狀標記會說明面板在任何特定時間的特定視覺設定。一個面板可以有多個變體,每個變體都有專屬 ID。 每個變體都會定義特定設定的屬性,例如界線、可見度、圖層、Alpha、圓角半徑和插邊。子類也可以從「父項」子類繼承屬性。 |
<KeyFrameVariant> |
<Variant> 的擴充功能可根據連續的分數值 (0 到 1),在不同變體之間插補視覺屬性,並用於平滑且動態的轉場效果,例如在拖曳作業期間,面板的狀態取決於連續輸入 (例如拖曳量) 時。 |
<Transitions> |
巢狀標記包含一組 每個 |
程式碼範例
<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>