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.
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 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.
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 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.
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 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.
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 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.
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 use as seguintes APIs Display descontinuadas para determinar o tamanho da janela:
getSize(): descontinuado no Android 11 (nível 30 da API)getMetrics(): descontinuado no Android 11 (nível 30 da API)getRealSize(): descontinuado no Android 12 (nível 31 da API)getRealMetrics(): descontinuado no Android 12 (nível 31 da API)
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.
Crie com o Compose. Fique por dentro dos recursos e lançamentos mais recentes.
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.
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 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.
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.
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.
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.
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 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.