Настроить панель

Панель описывает свойства занимаемой ею области и служит контейнером приложения. Для определения панелей используются 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>

Определение панели

Каждая панель в фреймворке Scalable UI определяется XML-тегом <TaskPanel> , который описывает свойства контейнера приложения. Системный пользовательский интерфейс загружает эти определения панелей и отслеживает их состояние до загрузки другой конфигурации.

Например, изменение конфигурации из-за поворота или явного системного запроса. <TaskPanel> служит базовым компонентом для создания персонализированного пользовательского интерфейса с помощью настраиваемых компонентов.

XML-атрибуты

Тег <TaskPanel> может содержать эти атрибуты, которые можно использовать для определения состояний и переходов.

Атрибут Статус Описание
id Обязательный Задаёт уникальный идентификатор панели. Этот атрибут используется для извлечения панели из PanelPool и управления её состоянием в системе.
role Обязательный Определяет назначение или функцию панели в системе. Значение может ссылаться на строковый ресурс, строковый массив имён компонентов или идентификатор макета. Например, оно может определять постоянные действия, которые всегда должны отображаться на панели, или макет, который необходимо расширить.
defaultVariant Необязательный Указывает идентификатор варианта, который панель должна изначально использовать при загрузке. Если не указан, система может использовать первый заданный вариант по умолчанию.
displayId Необязательный Указывает идентификатор дисплея, на котором должна отображаться панель.
defaultLayer Необязательный Можно указать Z-порядок по умолчанию для вариантов панели, если варианты явно не определяют слой.
controller Необязательный,
могут быть изменены

Ссылается на ресурс (обычно идентификатор XML), который определяет контроллер, специфичный для панели, что позволяет хранить и передавать значения конфигурации настраиваемым контроллерам панели.

Эти контроллеры должны реализовывать интерфейс com.android.car.scalableui.panel.TaskPanelController . Обычно эти контроллеры используются для гибкого распределения задач во время выполнения на панели.

Дочерние элементы XML

Тег <TaskPanel> может включать эти атрибуты для определения характеристик и поведения по умолчанию,

Атрибут Описание
<Variant>

Вложенный тег описывает конкретную визуальную конфигурацию панели в любой момент времени. Панель может иметь несколько вариантов, каждый из которых идентифицируется уникальным идентификатором.

Каждый вариант определяет такие свойства, как границы, видимость, слой, альфа-канал, радиус угла и вставки для данной конкретной конфигурации. Варианты также могут наследовать свойства родительского варианта.

<KeyFrameVariant> Расширение <Variant> позволяет интерполировать визуальные свойства между различными вариантами на основе значения непрерывной дроби (от 0 до 1) и используется для плавных и динамических переходов, например во время операции перетаскивания, когда состояние панели зависит от непрерывного ввода, например величины перетаскивания.
<Transitions>

Вложенный тег содержит набор определений <Transition> , которые описывают, как пользовательский интерфейс должен анимироваться между различными вариантами.

Каждый <Transition> определяет варианты «от» и «до» , событие, которое его запускает, и может дополнительно указывать пользовательский аниматор, который будет использоваться для анимации, а также длительность и интерполятор.

Пример кода

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