Ofereça suporte a janelas de área de trabalho

A janela de área de trabalho permite que os usuários executem vários apps simultaneamente em janelas redimensionáveis para uma experiência versátil semelhante a um computador.

Na Figura 1, é possível ver a organização da tela com a janela de área de trabalho ativada. Observações:

  • Os usuários podem executar vários apps lado a lado simultaneamente.
  • A barra de tarefas está em uma posição fixa na parte de baixo da tela, mostrando os apps em execução. Os usuários podem fixar apps para acesso rápido.
  • A nova barra de cabeçalho personalizável decora a parte de cima de cada janela com controles, como minimizar e maximizar.
Figura 1. Janelas de área de trabalho em um tablet.

Por padrão, os apps são abertos em tela cheia em tablets Android. Para iniciar um app em janelas de área de trabalho, pressione e mantenha pressionada a alça de janela na parte de cima da tela e arraste a alça na interface, conforme mostrado na Figura 2.

Quando um app é aberto na janela do computador, outros apps também são abertos em janelas de computador.

Figura 2. Toque, pressione e arraste a alça da janela do app para entrar no janelamento da área de trabalho.

Os usuários também podem invocar a janela da área de trabalho no menu que aparece abaixo do gerenciador de janelas quando você toca ou clica nele ou usa o atalho de teclado Tecla Meta (Windows, Command ou Search) + Ctrl + para baixo.

Para sair das janelas da área de trabalho, os usuários fecham todas as janelas ativas ou pegam a alça na parte de cima de uma área de trabalho e arrastam o app para a parte de cima. O atalho de teclado Meta + H também sai da janela do computador e executa os apps em tela cheia novamente.

Para voltar ao modo de janelas do computador, toque ou clique no bloco de espaço do computador na tela "Recentes".

Redimensionamento e modo de compatibilidade

No sistema de janelas para computador, os apps com orientação bloqueada podem ser redimensionados livremente. Isso significa que, mesmo que uma atividade esteja bloqueada para a orientação de retrato, os usuários ainda podem redimensionar o app para uma janela de orientação de paisagem.

Figura 3. Redimensionar a janela de um app restrito a retrato para paisagem.

Os apps declarados como não redimensionáveis (ou seja, resizeableActivity = false) têm a interface dimensionada e mantêm a mesma proporção.

Figura 4. A interface de um app não redimensionável é dimensionada conforme a janela é redimensionada.

Os apps de câmera que bloqueiam a orientação ou são declarados como não redimensionáveis têm um tratamento especial para os visores da câmera: a janela é totalmente redimensionável, mas o visor mantém a mesma proporção. Ao presumir que os apps sempre são executados no modo retrato ou paisagem, eles fixam no código ou fazem suposições que levam a erros de cálculo da visualização ou da orientação ou proporção da imagem capturada, resultando em imagens esticadas, de lado ou de cabeça para baixo.

Até que os apps estejam prontos para implementar visores de câmera totalmente responsivos, o tratamento especial oferece uma experiência do usuário mais básica que mitiga os efeitos de suposições erradas.

Para saber mais sobre o modo de compatibilidade para apps de câmera, consulte Modo de compatibilidade do dispositivo.

Figura 5. O visor da câmera mantém a proporção à medida que a janela é redimensionada.

Inserções de cabeçalho personalizáveis

Todos os apps executados em janelas de computador têm uma barra de cabeçalho, mesmo no modo imersivo.
Verifique se o conteúdo do app não está obscurecido pela barra de cabeçalho. A barra de cabeçalho é um tipo de barra de legenda inserida: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar(); nas visualizações, WindowInsets.Type.captionBar(), que faz parte das barras do sistema.

Saiba mais sobre como processar encartes em Mostrar conteúdo de ponta a ponta no app e processar encartes de janela no Compose.

A barra de cabeçalho também é personalizável. O Android 15 introduziu o tipo de aparência APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND para tornar a barra de cabeçalho transparente e permitir que os apps desenhem conteúdo personalizado dentro da barra de cabeçalho.

Os apps passam a ser responsáveis por estilizar a parte de cima do conteúdo para que ela se pareça com a barra de legenda (segundo plano, conteúdo personalizado etc.), com exceção dos elementos de legenda do sistema (botões "Fechar" e "Maximizar"), que são desenhados pelo sistema na barra de legenda transparente na parte de cima do app.

Os apps podem alternar a aparência dos elementos do sistema dentro da legenda para temas claros e escuros usando APPEARANCE_LIGHT_CAPTION_BARS, de forma semelhante à forma como a barra de status e a barra de navegação são alternadas.

O Android 15 também introduziu o método WindowInsets#getBoundingRects(), que permite que os apps inspecionem os enfeites da barra de legenda com mais detalhes. Os apps podem diferenciar entre áreas em que o sistema mostra elementos do sistema e áreas não utilizadas em que podem inserir conteúdo personalizado sem sobrepor elementos do sistema.

A lista de objetos Rect retornados pela API indica regiões do sistema que precisam ser evitadas. Qualquer espaço restante (calculado subtraindo os retângulos dos encartes da barra de legendas) é onde o app pode desenhar sem sobrepor elementos do sistema e com a capacidade de receber entrada.

Chrome antes e depois da implementação de cabeçalhos personalizados.
Figura 6. O Chrome antes e depois da implementação de cabeçalhos personalizados.

Suporte a multitarefas e várias instâncias

A multitarefa está no centro do janelamento de computadores, e permitir várias instâncias do app pode aumentar muito a produtividade dos usuários.

O Android 15 apresenta PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI, que os apps podem definir para especificar que a interface do sistema precisa ser mostrada para permitir que o app seja iniciado como várias instâncias.

Gerenciar instâncias de apps com gestos de arrasto

No modo de várias janelas, os usuários podem iniciar uma nova instância do app arrastando um elemento de visualização para fora da janela do app. Os usuários também podem mover elementos entre instâncias do mesmo app.

Figura 7. Inicie uma nova instância do Chrome arrastando uma guia para fora da janela do computador.

O Android 15 introduz duas flags para personalizar o comportamento de arrastar e soltar:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: indica que um arrasto não processado precisa ser delegado ao sistema para ser iniciado se nenhuma janela visível processar a inserção. Ao usar essa flag, o autor da chamada precisa fornecer ClipData com um Item que contenha um IntentSender imutável para uma atividade a ser iniciada (consulte ClipData.Item.Builder#setIntentSender()). O sistema pode iniciar a intent ou não com base em fatores como o tamanho da tela atual ou o modo de janela. Se o sistema não iniciar a intent, ela será cancelada pelo fluxo normal de arrastar e soltar.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: indica que uma operação de arrasto pode cruzar os limites da janela (para várias instâncias do mesmo aplicativo).

    Quando startDragAndDrop() é chamado com essa flag definida, apenas janelas visíveis pertencentes ao mesmo aplicativo podem participar da operação de arrastar e receber o conteúdo arrastado.

Figura 8. Mova uma guia entre duas instâncias do app Chrome.

Outras otimizações

Personalize inicializações de apps e faça a transição dos apps da janela da área de trabalho para a tela cheia.

Especificar o tamanho e a posição padrão

Nem todos os apps, mesmo que redimensionáveis, precisam de uma janela grande para oferecer valor ao usuário. Use o método ActivityOptions#setLaunchBounds() para especificar um tamanho e uma posição padrão quando uma atividade for iniciada.

Entrar no modo de tela cheia no espaço da área de trabalho

Os apps podem entrar em tela cheia chamando Activity#requestFullScreenMode(). O método mostra o app em tela cheia diretamente da janela do computador.