Cómo configurar un panel

Un panel describe las propiedades del área que ocupa y actúa como un contenedor de la app. Usas configuraciones XML para definir paneles, que proporcionan un enfoque flexible y sin código para personalizar las IUs. Para administrar instancias y estados, el sistema realiza un seguimiento de los paneles definidos.

Lista de paneles

La IU del sistema carga las definiciones de sus paneles desde un recurso de array llamado window_states. Este array de recursos apunta a los archivos XML, en los que se definen las configuraciones de paneles individuales. Este enfoque centralizado significa que los paneles administrados por la IU escalable se cargan según lo previsto y están listos para que el sistema los use.

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

Definición de panel

Cada panel en el framework de IU escalable se define con una etiqueta XML llamada <TaskPanel> o <DecorPanel>. <TaskPanel> describe las propiedades de un contenedor de la app, mientras que <DecorPanel> describe las propiedades de un contenedor de vista. La IU del sistema carga estas definiciones de panel y realiza un seguimiento de los paneles hasta que se carga otra configuración. Por ejemplo, debido a un cambio de configuración debido a la rotación o a una solicitud explícita del sistema. Los elementos <TaskPanel> y <DecorPanel> sirven como componentes fundamentales para crear una experiencia personalizada a través de componentes de IU configurables.

Atributos XML

La etiqueta <TaskPanel> puede contener estos atributos que puedes usar para definir estados y transiciones.

Atributo Estado Descripción
id Obligatorio Especifica un identificador único para el panel. Este atributo se usa para recuperar el panel de PanelPool y administrar su estado dentro del sistema.
role Obligatorio Define el propósito o la función del panel en el sistema. El valor puede hacer referencia a un recurso de cadenas, un array de cadenas de nombres de componentes o un ID de diseño. Por ejemplo, puede definir actividades persistentes que siempre se deben mostrar en el panel o un diseño que se debe aumentar.
defaultVariant Opcional Especifica el ID de la variante que el panel debe adoptar inicialmente cuando se carga. Si no se especifica, el sistema puede usar la primera variante definida como predeterminada.
displayId Opcional Especifica el ID de la pantalla en la que se debe mostrar el panel.
defaultLayer Opcional Puede especificar un orden Z predeterminado para las variantes del panel si las variantes no definen explícitamente una capa.
controller Opcional,
sujeto a cambios

Hace referencia a un recurso (por lo general, un ID de XML) que define un controlador específico del panel , lo que permite almacenar y pasar valores de configuración a los controladores de panel personalizados.

Estos controladores deben implementar la com.android.car.scalableui.panel.TaskPanelController interfaz. Un caso de uso común de estos controladores es definir asignaciones de tareas de tiempo de ejecución flexibles en el panel.

Elementos secundarios XML

Las etiquetas <TaskPanel> y <DecorPanel> pueden incluir estos elementos secundarios para definir características y comportamientos predeterminados.

Atributo Descripción
<Variant>

La etiqueta anidada describe una configuración visual específica para el panel en cualquier momento. Un panel puede tener varias variantes, cada una identificada por un ID único.

Cada variante define propiedades como límites, visibilidad, capa, alfa, radio de esquina e inserciones para esa configuración en particular. Las variantes también pueden heredar propiedades de una variante superior.

<KeyFrameVariant> La extensión de <Variant> permite la interpolación de propiedades visuales entre diferentes variantes en función de un valor de fracción continua (de 0 a 1) y se usa para transiciones fluidas y dinámicas, como durante una operación de arrastre, cuando el estado del panel depende de una entrada continua, como una cantidad de arrastre.
<Transitions>

La etiqueta anidada contiene una colección de <Transition> definiciones, que describen cómo la IU debe animarse entre diferentes variantes.

Cada <Transition> define las variantes from y to, el evento que la activa y, de manera opcional, puede especificar un Animator personalizado para usar en la animación, así como una duración y un interpolador.

La etiqueta <TaskPanel> también puede incluir estos elementos secundarios especiales para definir comportamientos específicos de las tareas.

Atributo Descripción
<Restart> Etiqueta anidada para describir una política de reinicio que se aplicará cuando un TaskPanel quede vacío. Esta etiqueta admite los atributos policy, que se pueden configurar como DEFAULT o LAST, y maxRetry, que especifica cuántas veces se intentará el reinicio antes de que se agote el tiempo de espera.
<TaskBehavior> Etiqueta anidada para describir el comportamiento de los lanzamientos de tareas en este panel. Esta etiqueta admite el atributo newTaskLaunchPolicy, que configura el comportamiento de los lanzamientos de tareas nuevas desde este TaskPanel. Los valores de configuración válidos para esta política son DEFAULT, REMAIN_IN_SOURCE, o REPARENT_TO_SOURCE.

Código de muestra

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