パネルを構成する

パネルは、占有する領域のプロパティを記述し、アプリ コンテナとして機能します。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> タグには、状態と遷移を定義するために使用できる次の属性を含めることができます。

属性 ステータス 説明
id 必須 パネルの一意の識別子を指定します。この属性は、PanelPool からパネルを取得し、システム内でその状態を管理するために使用されます。
role 必須 システム内のパネルの目的または機能を定義します。この値は、文字列リソース、コンポーネント名の文字列配列、またはレイアウト ID を参照できます。たとえば、常にパネルに表示される永続的なアクティビティや、拡張されるレイアウトを定義できます。
defaultVariant 任意 パネルが読み込まれたときに最初に採用するバリアントの ID を指定します。指定しない場合、システムは最初に定義されたバリアントをデフォルトとして使用できます。
displayId 任意 パネルを表示するディスプレイの ID を指定します。
defaultLayer 任意 バリアントでレイヤが明示的に定義されていない場合に、パネルのバリアントのデフォルトの Z オーダーを指定できます。
controller 省略可、
変更される可能性があります

パネル固有のコントローラを定義するリソース(通常は XML ID)を参照します。これにより、構成値をカスタム パネル コントローラに保存して渡すことができます。

これらのコントローラは com.android.car.scalableui.panel.TaskPanelController インターフェースを実装する必要があります。これらのコントローラの一般的なユースケースは、パネルで柔軟なランタイム タスク割り当てを定義することです。

XML 子要素

<TaskPanel> タグには、特性とデフォルトの動作を定義する次の属性を含めることができます。

属性 説明
<Variant>

ネストされたタグは、特定の時点でのパネルの特定の視覚構成を表します。パネルには複数のバリエーションがあり、それぞれが一意の ID で識別されます。

各バリエーションは、特定の構成の境界、可視性、レイヤ、アルファ、角丸の半径、インセットなどのプロパティを定義します。バリエーションは、バリエーションからプロパティを継承することもできます。

<KeyFrameVariant> <Variant> の拡張により、連続した割合値(0 ~ 1)に基づいて、異なるバリアント間の視覚プロパティを補間できます。これは、ドラッグ操作中など、パネルの状態がドラッグ量などの連続した入力に依存する場合の、スムーズで動的なトランジションに使用されます。
<Transitions>

ネストされたタグには、さまざまなバリエーション間で UI をアニメーション表示する方法を記述する <Transition> 定義のコレクションが含まれています。

<Transition> は、from バリアントと to バリアント、トリガーするイベントを定義します。また、アニメーションに使用するカスタム 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>