Participe do evento ⁠#Android11: apresentação de lançamento da versão Beta no dia 3 de junho.

Como gerenciar janelas

Esta página descreve o gerenciador de janelas no Chrome OS.

Gerenciador de janelas no Chrome OS

Os apps para Android são agrupados nas seguintes categorias:

Nível de API Comportamento do gerenciador de janelas
Android 1.5 (API nível 3) e anteriores Esses apps são sempre exibidos em tela cheia.
Android 1.6 (API nível 6) até Android 6.0 (API nível 23) Esses apps são considerados inseguros para redimensionamento. Se possível, eles são iniciados por padrão em uma janela retrato do tamanho do smartphone. Caso contrário, são iniciados em uma janela paisagem do tamanho do smartphone. O usuário pode pressionar F4 para entrar ou sair do modo de tela cheia. Isso encerra e reinicia o app e o mantém em tela cheia no modo retrato (ou paisagem com a rotação do dispositivo).
Android 7.0 (API nível 24) redimensionável Esse é o padrão para o Android 7.0: os apps podem ser redimensionados sem serem reiniciados. Esses apps geralmente são maximizados por padrão. Chromebooks na versão M60 e anteriores iniciam janelas do tamanho do smartphone (Nexus 5X) no modo retrato.
Android 7.0 (API nível 24) não redimensionável Um aplicativo especifica android:resizeableActivity="false" e isso evita o redimensionamento. No entanto, algumas situações exigem um redimensionamento. Por exemplo, quando o usuário muda o tamanho da tela, quando a atividade ocorre sobre outra redimensionável ou quando a atividade muda a orientação.
Android 7.0 (API nível 24) controlado por app O app solicita um tamanho especial de inicialização.

Os estados de apps, como maximizado ou vinculado, são memorizados.

Regras de atividade raiz

Em Chromebooks, uma janela consiste em uma pilha de janelas de atividade. Todas as janelas dessa pilha têm o mesmo tamanho e orientação.

Para evitar mudanças repentinas de orientação e tamanho, que são confusas para o usuário em um ambiente de computador, o gerenciador de janelas nos Chromebooks faz o mesmo que o gerenciador de janelas no Android quando o modo lado a lado é usado:

  • A atividade na parte inferior da pilha determina os atributos de todas as atividades acima. Isso pode causar situações inesperadas em que uma atividade recém-iniciada não redimensionável no modo retrato se torna redimensionável no modo paisagem.

Nesse caso, o modo dispositivo faz diferença: no modo tablet, a orientação não é bloqueada, e cada orientação determina a si mesma, como é normal no Android. No entanto, o tamanho do app será bloqueado se a atividade segmentar o Android 6.0 (API nível 23) ou anteriores.

Orientação

A orientação mais comum é o retrato, já que os smartphones são mais usados nessa posição. Esse modo é indicado para smartphones, mas não para laptops. Por outro lado, o modo paisagem é bom para laptops e tablets. Para conseguir os melhores resultados para seu aplicativo com um gerenciador de janelas, considere a compatibilidade com ambas as orientações.

Alguns apps para Android presumem que quando um dispositivo é colocado no modo retrato, o valor de rotação é sempre Surface.ROTATION_0. Isso é válido para a maioria dos dispositivos Android. No entanto, quando o app está em um determinado modo ARC, o valor de rotação para a orientação retrato pode não ser Surface.ROTATION_0.

Para ter um valor de rotação preciso ao ler o acelerômetro ou sensores semelhantes, use o método Display.getRotation() e troque o eixo corretamente.

Se você oferecer compatibilidade a apenas um modo, adicione as informações ao manifesto para que o gerenciador de janelas saiba disso antes de iniciar o aplicativo. Ao especificar uma orientação, especifique as orientações do sensor sempre que possível, pois os Chromebooks geralmente são conversíveis, e apps de cabeça para baixo não são nada interessantes. Mantenha a orientação selecionada e, o mais importante: evite solicitar uma orientação no manifesto e definir outra programaticamente mais tarde. Se você mudar a orientação com base no tamanho da janela, não conseguirá mais sair de uma pequena janela retrato, e o usuário não poderá voltar para uma janela grande paisagem.

Tamanho de inicialização

É possível mudar o tamanho de inicialização dos apps de uma das seguintes maneiras:

  • Use um tamanho de inicialização somente em ambientes de computador. Isso ajuda o gerenciador de janelas a informar os limites e a orientação corretos. Para indicar uma preferência usada no modo de área de trabalho, adicione as seguintes metatags na <activity>:

    <meta-data android:name="WindowManagerPreference:FreeformWindowSize"
                   android:value="[phone|tablet|maximize]" />
        <meta-data android:name="WindowManagerPreference:FreeformWindowOrientation"
                   android:value="[portrait|landscape]" />
        
  • Use limites de inicialização estáticos. Use <layout> na entrada do manifesto da sua atividade para especificar um tamanho inicial "fixo". Veja este exemplo:

    <layout android:defaultHeight="500dp"
                android:defaultWidth="600dp"
                android:gravity="top|end"
                android:minHeight="450dp"
                android:minWidth="300dp" />
        
  • Use limites de inicialização dinâmicos. Uma atividade pode criar e usar ActivityOptions.setLaunchBounds(Rect) ao criar uma nova atividade. Ao especificar um retângulo vazio, seu app pode ser maximizado.

Tela cheia

Essa opção funciona da mesma forma que no Android: se a janela não estiver cobrindo a tela inteira, solicitações de tela cheia (ocultando toda a IU do sistema) serão ignoradas. Quando o app é maximizado, os métodos/layouts/funções normais para entrar no modo de tela cheia se tornam válidos. Dessa forma, a IU do sistema (barra de controle da janela e a estante) desaparece.