Configurar um painel

Um painel descreve as propriedades da área que ocupa e atua como um contêiner de app. Você usa configurações XML para definir painéis, que oferecem uma abordagem flexível e sem código para personalizar interfaces. Para gerenciar instâncias e estados, o sistema rastreia painéis definidos.

Lista de painéis

A interface do sistema carrega as definições dos painéis de um recurso de matriz chamado window_states. Essa matriz de recursos aponta para os arquivos XML, em que as configurações de painel individuais são definidas. Essa abordagem centralizada significa que os painéis gerenciados pela interface escalonável são carregados conforme o esperado e estão prontos para uso pelo sistema.

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

Definição do painel

Cada painel no framework de UI escalonável é definido com uma tag XML chamada <TaskPanel>, que descreve as propriedades de um contêiner de app. A interface do sistema carrega essas definições de painel e rastreia os painéis até que outra configuração seja carregada.

Por exemplo, por uma mudança de configuração devido à rotação ou a uma solicitação explícita do sistema. O <TaskPanel> serve como um componente fundamental para criar uma experiência personalizada com componentes de interface configuráveis.

Atributos XML

A tag <TaskPanel> pode conter estes atributos que você pode usar para definir estados e transições.

Atributo Status Descrição
id Obrigatório Especifica um identificador exclusivo para o painel. Esse atributo é usado para recuperar o painel do PanelPool e gerenciar o estado dele no sistema.
role Obrigatório Define a finalidade ou função do painel no sistema. O valor pode se referir a um recurso de string, uma matriz de strings de nomes de componentes ou um ID de layout. Por exemplo, ele pode definir atividades persistentes que sempre precisam ser mostradas no painel ou um layout a ser inflado.
defaultVariant Opcional Especifica o ID da variante que o painel deve adotar inicialmente quando for carregado. Se não for especificado, o sistema poderá usar a primeira variante definida como padrão.
displayId Opcional Especifica o ID da tela em que o painel vai aparecer.
defaultLayer Opcional Pode especificar uma ordem Z padrão para as variantes do painel se elas não definirem explicitamente uma camada.
controller Opcional,
sujeito a mudanças

Faz referência a um recurso (geralmente um ID XML) que define um controlador específico do painel, permitindo o armazenamento e a transmissão de valores de configuração para controladores de painel personalizados.

Esses controladores precisam implementar a interface com.android.car.scalableui.panel.TaskPanelController. Um caso de uso comum desses controladores é definir alocações flexíveis de tarefas de runtime no painel.

Elementos filhos XML

A tag <TaskPanel> pode incluir estes atributos para definir características e comportamentos padrão:

Atributo Descrição
<Variant>

Uma tag aninhada descreve uma configuração visual específica para o painel em qualquer momento. Um painel pode ter várias variantes, cada uma identificada por um ID exclusivo.

Cada variante define propriedades como limites, visibilidade, camada, alfa, raio do canto e encartes para essa configuração específica. As variantes também podem herdar propriedades de uma variante principal.

<KeyFrameVariant> A extensão de <Variant> permite a interpolação de propriedades visuais entre diferentes variantes com base em um valor de fração contínuo (de 0 a 1) e é usada para transições suaves e dinâmicas, como durante uma operação de arrastar, quando o estado do painel depende de uma entrada contínua, como um valor de arrasto.
<Transitions>

A tag aninhada contém uma coleção de definições de <Transition>, que descrevem como a interface precisa animar entre diferentes variantes.

Cada <Transition> define as variantes from e to, o evento que o aciona e pode especificar um Animator personalizado para usar na animação, além de uma duração e um interpolador.

Exemplo de código

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