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

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

Uma pequena lista de configurações e APIs permite criar apps adaptáveis. Mas 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 ao 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 da API 30) e versões anteriores. No Android 12 (nível 31 da API) e versões mais recentes, as 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.

✓ Faça

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 for destinado a níveis de API anteriores a 24. Caso contrário, não se preocupe, já que é true por padrão 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 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.

✓ Faça

Elimine 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, independente da configuração do atributo screenOrientation.

✗ Não

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

Os apps com efeito letterbox têm menos chances de serem descobertos no Google Play em tablets, dobráveis e dispositivos ChromeOS.

Proporção

À medida que os tamanhos de tela e janela variam, o mesmo acontece com as proporções, de altas e estreitas a quadradas e curtas e largas.

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

✓ Faça

Adapte o app para que ele se ajuste à tela, independente das dimensões relativas.

Elimine as configurações minAspectRatio e maxAspectRatio do manifesto do app. Ou verifique se o app pode ser redimensionado e se a proporção é ajustada automaticamente (consulte a seção Redimensionamento).

✗ Não

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

No Android 14 (nível 34 da API) e versões mais recentes, os usuários podem substituir a proporção da tela 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

A otimização de 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 o app mudando os layouts à medida que a classe de tamanho de janela do app muda.

✓ Faça

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

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

✗ Não

Não ignore 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 obsoletas

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

✓ Faça

Use WindowManager#getCurrentWindowMetrics() e WindowMetrics#getBounds() para saber o tamanho da janela do app. Use WindowMetrics#getDensity() para acessar a densidade da tela.

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

✓ Faça

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

✗ Não

Não dependa de tecnologia desatualizada. Não deixe seu app ficar obsoleto.

Biblioteca adaptável do Compose Material 3

A biblioteca adaptativa do Compose Material 3 oferece componentes e APIs que facilitam o desenvolvimento de apps adaptáveis.

✓ Faça

Use as APIs a seguir 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 e listas. Adapta o layout ao tamanho da janela do app.
  • SupportingPaneScaffold: implementa o layout canônico do painel de suporte.
✗ Não

Não reinvente 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 os layouts com base em mudanças na tela, principalmente no tamanho da janela do app ou na posição do dispositivo.

✓ Faça

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. Reposicione as caixas de diálogo para que possam ser acessadas em todas as telas.

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

✓ Faça o seguinte:liste e detalhe as atividades 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. Botões esticados parecem mal projetados. Se você usar Modifier.fillMaxWidth, não presuma que esse seja o comportamento certo para todos os tamanhos de tela.

✗ Nã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 adaptáveis oferecem suporte a teclados, mouses e stylus externos para proporcionar uma experiência do usuário aprimorada e ajudar as pessoas a serem mais produtivas em dispositivos de todos os tipos.

✓ Faça

Aproveite a funcionalidade integrada do framework Android para navegação por guias do teclado e clique, seleção e rolagem do mouse ou trackpad. Publique os atalhos de teclado do seu 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 impossibilite métodos de entrada alternativos. Não introduza problemas de acessibilidade.

Resumo

  • Criar um app com o Compose e a biblioteca adaptativa do Material 3
  • 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 entradas que não sejam por 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 hoje mesmo.