O que fazer e o que fazer: adaptações

Os apps adaptáveis oferecem suporte a telas de todos os tamanhos: tela inteira, janelas redimensionáveis no modo de várias janelas, orientações de retrato e paisagem, telas dobráveis e desdobráveis de dispositivos dobráveis.

Uma lista curta de configurações e APIs permite criar apps adaptáveis. No entanto, algumas configurações e APIs desatualizadas são incompatíveis com apps adaptáveis e precisam ser evitadas.

Capacidade de redimensionamento

Os apps adaptáveis oferecem suporte a redimensionamento e ao modo de várias janelas.

O atributo resizeableActivity dos elementos de manifesto <activity> e <application> ativa ou desativa o modo de várias janelas no Android 11 (nível 30 da API) e versões anteriores. No Android 12 (nível 31 da API) e versões mais recentes, telas grandes oferecem suporte ao modo de várias janelas, independente do atributo. Para mais informações, consulte Suporte ao modo de várias janelas.

✓ Fazer

Permita que seu app participe de cenários multitarefa e de várias janelas para aumentar a produtividade e a satisfação do usuário.

Defina resizeableActivity="true" se o app segmentar níveis de API anteriores ao 24. Caso contrário, esqueça. O padrão é true no Android 7.0 (nível 24 da API) e versões mais recentes.

✗ Não

Não defina resizeableActivity="false" para nenhum nível da API. Não exclua seu app de casos de uso que envolvam o modo de várias janelas.

Orientação

Os apps adaptáveis oferecem suporte à orientação de retrato e paisagem, independente do tamanho da tela ou do modo de janela.

A configuração do manifesto screenOrientation restringe a orientação da atividade.

✓ O que fazer

Remova a configuração screenOrientation do manifesto do app.

Bloquear a orientação dos apps não impede mudanças no tamanho da janela. Os apps são redimensionados quando entram no modo de várias janelas, quando um dispositivo é dobrado ou desdobrado ou quando uma janela do tipo desktop é redimensionada. O app precisa oferecer suporte a mudanças no tamanho da janela, independentemente da configuração do atributo screenOrientation.

✗ Não

Não restrinja a orientação da atividade. Os apps que bloqueiam a orientação são letterbox em dispositivos de tela grande e tamanhos de janela incompatíveis.

Os apps com efeito letterbox podem ter a detecção reduzida no Google Play para tablets, dobráveis e dispositivos ChromeOS.

Proporção

À medida que os tamanhos de tela e janela variam, as proporções também variam, de alta e estreita a quadrada, curta e larga.

As configurações do manifesto minAspectRatio e maxAspectRatio restringem a proporção do app a valores codificados.

✓ O que fazer

Adapte seu app para caber na tela, independente das dimensões relativas.

Elimine as configurações minAspectRatio e maxAspectRatio do manifesto do app. Ou garanta que o app seja redimensionável e que a proporção seja automática (consulte a seção Redimensionabilidade).

✗ Não

Não tente controlar as dimensões relativas do app. Se ele for executado em uma tela ou em uma janela com uma proporção incompatível com a proporção do app, ele será aplicado em um efeito letterbox.

No Android 14 (nível 34 da API) e versões mais recentes, os usuários podem substituir a proporção do app para expandir apps com efeito letterbox e preencher a área de exibição disponível. Consulte Modo de compatibilidade do dispositivo.

Tamanho da janela

Otimizar layouts para diferentes tamanhos de tela é a premissa central do design adaptável. Os apps adaptáveis se concentram no tamanho da janela do app, e não no tamanho da tela do dispositivo. Quando o app está em tela cheia, a janela do app é a tela do dispositivo.

As classes de tamanho de janela oferecem uma maneira sistemática de determinar e categorizar o tamanho da janela do app. Adapte seu app mudando os layouts conforme a classe de tamanho da janela do app muda.

✓ Fazer

Avalie o tamanho da janela do app com base nas classes de tamanho de janela.

Para determinar a classe de tamanho de janela, use a função de nível superior currentWindowAdaptiveInfo() da biblioteca adaptável do Compose Material 3. Para mais informações, consulte Criar apps adaptáveis.

✗ Não

Não desconsidere a utilidade das definições de classe de tamanho de janela e das APIs integradas. Não use APIs descontinuadas para calcular o tamanho da janela.

APIs descontinuadas

APIs de plataforma mais antigas não medem corretamente a janela do app. Algumas medem a tela do dispositivo, outras excluem a decoração do sistema.

✓ O que fazer

Use WindowManager#getCurrentWindowMetrics() e WindowMetrics#getBounds() para saber o tamanho da janela do app. Use WindowMetrics#getDensity() para saber a densidade de exibição.

✗ Não

Não use as seguintes APIs Display descontinuadas para determinar o tamanho da janela:

Escrever

O Jetpack Compose foi criado para o desenvolvimento de interfaces adaptáveis. Sem XML, sem arquivos de layout, sem qualificadores de recursos. Apenas elementos combináveis sem estado baseados em Kotlin como Column, Row e Box que descrevem sua interface e modificadores como offset, padding e size que adicionam comportamento aos elementos da interface.

✓ O que fazer

Crie com o Compose. Fique por dentro dos recursos e lançamentos mais recentes.

✗ Não

Não confie em tecnologia desatualizada. Não deixe que o app se torne obsoleto.

Biblioteca adaptável do Compose Material 3

A biblioteca Compose Material 3 Adaptive fornece componentes e APIs que facilitam o desenvolvimento de apps adaptáveis.

✓ O que fazer

Use as APIs abaixo para tornar seu app adaptável:

  • NavigationSuiteScaffold: alterna entre a barra de navegação e a coluna de navegação, dependendo da classe de tamanho da janela do app.
  • ListDetailPaneScaffold: implementa o layout canônico de detalhes da lista. Adapta o layout ao tamanho da janela do app.
  • SupportingPaneScaffold: implementa o layout canônico do painel de suporte.
✗ Não

Não tente reinventar a roda. Não perca os ganhos de produtividade do desenvolvedor fornecidos por todas as bibliotecas do Jetpack Compose.

Layouts

Os usuários esperam que os apps aproveitem ao máximo o espaço de exibição disponível com conteúdo complementar ou controles aprimorados.

Os apps adaptáveis otimizam layouts com base em mudanças na tela, em particular, mudanças no tamanho da janela do app ou mudanças na postura do dispositivo.

✓ O que fazer

Mude os componentes da interface conforme o tamanho da janela muda para aproveitar o espaço de exibição disponível. Por exemplo, troque a barra de navegação na parte de baixo usada em tamanhos de janela compactos por uma coluna de navegação vertical em janelas médias e expandidas. Reorganizar as caixas de diálogo para que sejam acessíveis em todas as telas.

Organize o conteúdo em painéis para ativar layouts de vários painéis, como detalhes de lista e painéis de suporte para exibições de conteúdo dinâmico.

✓ Fazer: atividades de lista e detalhes organizadas em um layout de dois painéis.
✗ Não

Se você não estiver usando painéis de conteúdo, não estique os elementos da interface para preencher o espaço de exibição disponível. Linhas longas de texto são difíceis de ler. Os botões esticados parecem mal projetados. Se você usar Modifier.fillMaxWidth, não suponha que esse é o comportamento correto para todos os tamanhos de tela.

✗ O que não fazer:o layout é esticado para preencher a janela em expansão.

Dispositivos de entrada

Os usuários não usam apenas telas touchscreen para interagir com apps.

Os apps adaptativos oferecem suporte a teclados, mouses e styluses externos para proporcionar uma experiência aprimorada e ajudar os usuários a serem mais produtivos em todos os tipos de formatos.

✓ O que fazer

Aproveite a funcionalidade integrada do framework do Android para navegação de guias de teclado e clique, seleção e rolagem do mouse ou trackpad. Publique os atalhos do teclado do app no Auxiliar de atalhos do teclado.

Use a biblioteca Material 3 do Jetpack para permitir que os usuários escrevam em qualquer componente TextField usando uma stylus.

✗ Não

Não torne os métodos de entrada alternativos impossíveis. Não apresente problemas de acessibilidade.

Resumo

  • Criar seu app com o Compose e a biblioteca Material 3 Adaptive
  • Basear layouts em classes de tamanho de janela
  • Criar layouts com vários painéis
  • Tornar seu app redimensionável
  • Nunca bloquear a orientação da atividade
  • Não restringir a proporção
  • Suporte a entrada diferente do toque
  • Evitar APIs descontinuadas

✓ Faça o que os usuários esperam: otimize o app para a diversidade de dispositivos que as pessoas usam todos os dias.

✗ Não espere. Comece a usar hoje mesmo!