Os apps adaptáveis são compatíveis com 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. 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 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 30 da API) 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 direcionado a níveis de API inferiores a 24. Caso contrário, não se preocupe, porque ele é 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 restringir 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 é redimensionável 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 dele é 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 conforme a classe de tamanho da 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 currentWindowAdaptiveInfo()
da biblioteca adaptável do Compose Material 3. 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 descontinuadas
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 adaptável do Compose Material 3 oferece componentes e APIs que facilitam o desenvolvimento de apps adaptáveis.
Use as seguintes APIs 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 inferior 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ção 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 de texto longas 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 canetas stylus externos para proporcionar uma experiência de usuário aprimorada e ajudar os usuários a serem mais produtivos em formatos 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 Assistente 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 a usar hoje mesmo!