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 IU. Para administrar instancias y estados, el sistema hace 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 del panel

Cada panel del framework de IU adaptable se define con una etiqueta XML llamada <TaskPanel>, que describe las propiedades de un contenedor de la app. La IU del sistema carga estas definiciones de paneles y realiza un seguimiento de los paneles hasta que se carga otra configuración.

Por ejemplo, por un cambio de configuración debido a la rotación o a una solicitud explícita del sistema. El <TaskPanel> sirve como componente fundamental 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 cadena, 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 inflar.
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 la 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 estas 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 interfaz com.android.car.scalableui.panel.TaskPanelController. Un caso de uso común de estos controladores es definir asignaciones de tareas flexibles en el panel durante el tiempo de ejecución.

Elementos secundarios XML

La etiqueta <TaskPanel> puede incluir estos atributos 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 dado. 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 y ajustes para esa configuración en particular. Las variantes también pueden heredar propiedades de una variante principal.

<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 continuo (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 definiciones de <Transition>, que describen cómo la IU debe animarse entre diferentes variantes.

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

Código de muestra

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