No Android 7.0 e versões mais recentes, os dispositivos podem mostrar vários apps simultaneamente usando o recurso de várias janelas. O Android oferece suporte a três configurações de várias janelas:
- Livre:permite que os usuários redimensionem dinamicamente os painéis de atividades e tenham mais de dois apps visíveis na tela. Com o modo janela para computador, os usuários podem criar janelas de formato livre em um computador que oferece interações no estilo desktop.
- Tela dividida:a implementação padrão de várias janelas, que fornece dois painéis de atividades em que os usuários podem colocar apps.
- Picture-in-picture (PiP):permite que dispositivos Android reproduzam conteúdo de vídeo em uma janela pequena enquanto o usuário interage com outros apps.
Requisitos de dispositivos com várias janelas
O suporte a várias janelas é ativado por padrão no Android 7.0 e versões mais recentes.
Para desativar, defina a flag config_supportsMultiWindow como
false no arquivo
config.xml do dispositivo.
Várias janelas é desativado por padrão em todos os dispositivos com pouca RAM (dispositivos que
declaram ActivityManager.isLowRam). Esses dispositivos
ignoram o valor da flag config_supportsMultiWindow.
Formato livre
O redimensionamento livre permite que o usuário crie janelas que podem ser redimensionadas livremente. O janelamento de forma livre é um pré-requisito para o modo janela para computador. Os requisitos de dispositivo para ativar o janelamento de forma livre são os seguintes:
-
Ative a flag
config_supportsMultiWindow. -
Ative o gerenciamento de janelas de forma livre de uma das seguintes maneiras:
-
Ative a flag
config_freeformWindowManagementemconfig.xml:<feature name="android.software.freeform_window_management" /> -
Inclua o seguinte no makefile do dispositivo:
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml
-
Ative a flag
No Android 16, os OEMs podem oferecer suporte ao modo janela para computador no dispositivo para uma configuração de várias janelas de forma livre usando a opção Ativar modo janela para computador.
Modo janela para computador
O modo janela para computador oferece um espaço de trabalho para multitarefa em telas grandes, criado com base em janelas de formato livre. O espaço de trabalho fica ao lado da tela cheia, com outros recursos e comportamentos da interface que oferecem ao usuário uma experiência de multitarefa mais flexível:
- Interação com teclado ou mouse:oferece suporte a interações com prioridade para toque e com prioridade para teclado ou mouse.
- Janelas de formato livre:executam apps em janelas redimensionáveis e móveis com barras de legenda e controles.
- Barra de tarefas aprimorada:oferece acesso fácil a apps em execução e fixados.
- Otimização de telas externas:transforma monitores conectados em ambientes de computador para dispositivos compatíveis.
- Espaços de trabalho virtuais:permite que os usuários organizem apps em vários espaços de trabalho.
Atenda aos seguintes pré-requisitos para configurar um dispositivo para janelas de computador:
-
Ative as seguintes flags:
- Todos os pré-requisitos para janelas de formato livre
- A flag global do modo janela para computador
config_isDesktopModeSupported
- A interface do sistema requer uma tela com pelo menos 600 dp de largura. O modo janela para computador pode não funcionar como esperado em telas menores.
-
O dispositivo não pode ter pouca memória RAM.
ActivityManager.isLowRamprecisa retornarfalse, já que dispositivos com pouca RAM não se qualificam para nenhum recurso de várias janelas.
A tabela a seguir lista as configurações em que um dispositivo pode ser configurado para modo janela para computador, dependendo do tamanho da tela e de como o dispositivo deve ser usado:
| Modo | Dispositivo portátil somente em tela cheia | Dispositivo portátil em tela cheia projetando para uma tela conectada | Tela grande em tela cheia que se estende até o display conectado | Modo Janela para Computador: primeira tela grande |
|---|---|---|---|---|
| Exemplo de formato | Smartphone | Smartphone compatível com HDMI para tela externa | Tablet compatível com HDMI para tela externa | Tablet com teclado que oferece suporte a HDMI para tela externa |
| Experiência de tela interna | Tela cheia, tela dividida, PiP, formato livre não desktop | Tela cheia, tela dividida e picture-in-picture | Tela cheia, tela dividida, PIP com suporte a modo janela para computador em espaços de trabalho separados | O modo janela para computador é o padrão (suporta mesas separadas). Os usuários podem entrar no modo janela para computador em tela cheia ou sensível ao toque usando mesas separadas. |
| Experiência de tela conectada | Espelhamento apenas da tela interna | Modo Janela para Computador apenas em telas conectadas | O modo janela para computador amplia os espaços de trabalho e está disponível em telas internas | O modo janela para computador amplia os espaços de trabalho e está disponível em telas internas |
| Configurações | ||||
config_supportsMultiWindow |
true |
true |
true |
true |
config_freeformWindowManagement |
true |
true |
true |
true |
config_isDesktopModeSupported |
false |
true |
true |
true |
config_canInternalDisplayHostDesktops |
Ignorado | false |
true |
true |
config_enterDesktopByDefaultOnFreeformDisplay |
Ignorado | false |
false |
true |
config_isDesktopModeSupported
A flag de sobreposição de configuração config_isDesktopModeSupported é a flag de nível superior para
ativar o modo janela para computador. Se não estiver ativada, todas as outras configurações serão ignoradas.
Defina como true em config.xml:
<!-- Globally enable Desktop windowing logic -->
<bool name="config_isDesktopModeSupported">true</bool>
Quando config_isDesktopModeSupported é true, o sistema trata automaticamente
telas externas qualificadas (como as conectadas por DisplayPort ou HDMI) como
candidatas ao modo janela para computador.
A tela precisa ser considerada qualificada pelo gerenciador de janelas (pelo menos pública e confiável, consulte modo janela para computador).
O sistema tenta iniciar tarefas no modo de forma livre nesses displays por padrão.
config_canInternalDisplayHostDesktops
A flag de sobreposição de configuração config_canInternalDisplayHostDesktops ativa o modo de janela para computador na tela interna do dispositivo. Defina como true em
config.xml:
<!-- Allow the primary internal display to host desktop sessions -->
<bool name="config_canInternalDisplayHostDesktops">true</bool>O modo janela para computador funciona melhor em um dispositivo de tela grande, como um tablet, em comparação com um smartphone menor. Se não estiver ativado, o Modo Janela para Computador só será compatível com uma tela externa (supondo que o dispositivo seja compatível com HDMI).
config_enterDesktopByDefaultOnFreeformDisplay
A flag de sobreposição de configuração config_enterDesktopByDefaultOnFreeformDisplay define
o modo de janela para computador como o padrão na tela interna do
dispositivo. Se não estiver ativado, o modo tela cheia será o padrão, com as mesas
coexistindo. Defina como true em config.xml:
<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
<bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>Ativar limites de tarefas
Para configurar o número máximo de tarefas compatíveis com o modo janela para computador, defina a flag de sobreposição de configuração config_maxDesktopWindowingActiveTasks em config.xml como o número máximo de tarefas compatíveis. Para oferecer suporte a um número ilimitado de tarefas, defina o valor da flag como 0:
<!-- Maximum number of tasks supported in desktop windowing -->
<integer name="config_maxDesktopWindowingActiveTasks">4</integer>Ativar limites de espaço de trabalho
Para configurar o número máximo de espaços de trabalho virtuais compatíveis com o modo janela para computador, defina a
flag de sobreposição de configuração config_maxDesktopWindowingDesks em config.xml
como o número máximo de espaços de trabalho compatíveis. Para oferecer suporte a um número ilimitado de mesas, defina o valor da flag como 0:
<!-- Maximum number of virtual desks supported in desktop windowing -->
<integer name="config_maxDesktopWindowingDesks">4</integer>Tela dividida
A experiência padrão de várias janelas é o modo de tela dividida, em que a interface do sistema é dividida no meio do dispositivo no modo retrato ou paisagem. Os usuários podem redimensionar a janela arrastando a linha divisória de um lado para o outro ou de cima para baixo, dependendo da orientação do dispositivo.
Depois de ativar a tela dividida, os fabricantes de dispositivos podem ativar o modo livre ou picture-in-picture.
O Android 8.0 e versões mais recentes melhoram a tela dividida compactando a tela de início quando o usuário toca em Início. Para detalhes da implementação, consulte Interações de tela dividida.
Picture-in-picture
Depois de ativar o modo de várias janelas com a
flag config_supportsMultiWindow, os fabricantes de dispositivos podem
oferecer suporte ao
picture-in-picture, que permite aos usuários assistir
vídeos enquanto navegam em outras atividades. Embora esse recurso seja destinado a dispositivos Android TV, outros tipos de dispositivos podem ser compatíveis com ele.
Para oferecer suporte ao PiP, ative o
recurso do sistema PackageManager#FEATURE_PICTURE_IN_PICTURE em
/android/frameworks/base/core/java/android/content/pm/PackageManager.java.
Para mais detalhes sobre a implementação do PiP em dispositivos com Android 8.0 e versões mais recentes, consulte Picture-in-picture.
IU do sistema
Ofereça suporte a todas as interfaces do sistema padrão de acordo com Verificação no modo de várias janelas.
Apps
Para oferecer suporte ao modo de várias janelas em apps pré-carregados, consulte Ofereça suporte ao modo de várias janelas.
Validação
Para validar a implementação do modo de várias janelas, execute os testes relacionados do CTS e siga as instruções em Verificação no modo de várias janelas.
| Versão do Android | Teste do CTS |
|---|---|
| 7.0 | /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts |
| 8.0 | /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts |
| 9.0 | /platform/cts/tests/framework/base/activitymanager/src/android/server/am |
| Android 10 e versões mais recentes | /platform/cts/tests/framework/base/windowmanager/src/android/server/wm |