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