Visão geral de compatibilidade de tela

O Android é executado em uma variedade de dispositivos que oferecem diferentes tamanhos e densidades de tela. O sistema realiza um escalonamento e redimensionamento básico para adaptar sua interface do usuário a diferentes telas. No entanto, ainda é preciso realizar outras ações para garantir que ela se ajuste perfeitamente a cada tipo de tela.

Esta página fornece uma visão geral desses tópicos e dos recursos disponíveis no Android para ajudar seu aplicativo a se adaptar a todos os tipos de telas. Para ver instruções mais específicas sobre como compilar seu aplicativo para essas variações de tela, consulte as seguintes páginas:

Tamanhos de tela

O tamanho da tela é o espaço visível fornecido para a IU do seu aplicativo. O tamanho da tela, como ele é conhecido para seu aplicativo, não é o tamanho real da tela do dispositivo. Ele considera a orientação da tela, decorações do sistema (como a barra de navegação) e mudanças na configuração da janela (como quando o usuário ativa o modo multijanela).

Layouts flexíveis

Por padrão, o Android redimensiona seu aplicativo para que ele caiba na tela atual. Para garantir que seu layout seja redimensionado corretamente até mesmo para pequenas variações no tamanho da tela, você deve implementá-lo com flexibilidade em mente. O princípio básico que você deve seguir é evitar codificar a posição e o tamanho dos componentes da sua IU. Em vez disso, permita que os tamanhos da visualização se expandam e especifique posições relativas à visualização pai ou a outras visualizações irmãs para que a ordem e os tamanhos que você pretende usar permaneçam iguais mesmo com a mudança do layout.

Saiba mais sobre layouts flexíveis.

Layouts alternativos

Um layout flexível é muito importante, mas você também deve projetar diferentes layouts que otimizam a experiência do usuário para o espaço disponível em diferentes dispositivos, como smartphones e tablets. Portanto, o Android permite que você forneça arquivos de layout alternativos que o sistema aplica no tempo de execução com base no tamanho da tela do dispositivo atual.

Imagem 1. O mesmo aplicativo usa um layout diferente para vários tamanhos de tela

Saiba como criar layouts alternativos.

Imagens expansíveis

Como seu layout deve se expandir para caber na tela atual, o mesmo deve ocorrer com os bitmaps que você anexar a qualquer uma das visualizações do layout. Entretanto, expandir um bitmap comum em direções arbitrárias pode resultar em artefatos de escalonamento estranhos e imagens distorcidas.

Para solucionar esse problema, o Android oferece suporte a bitmaps de nove patches, em que você especifica pequenas regiões de pixels expansíveis. O restante da imagem permanece não escalonado.

Saiba mais sobre bitmaps de nove patches.

Densidades de pixels

A densidade de pixels é o número de pixels dentro de uma área física da tela e é chamada de dpi (sigla em inglês para “pontos por polegada”). Ela é diferente da resolução, que é o número total de pixels em uma tela.

Imagem 2. Uma amplificação de dois dispositivos que têm o mesmo tamanho, mas densidades de pixels diferentes

Independência de densidade

Seu aplicativo atinge a “independência de densidade” quando preserva o tamanho físico (do ponto de vista do usuário) do design da sua IU quando é exibido em telas com densidades de pixels diferentes (conforme é mostrado na imagem 2). É importante manter a independência de densidade, pois, sem ela, um elemento da IU (como um botão) pode parecer maior em uma tela de baixa densidade e menor em uma tela de alta densidade (como os pixels são maiores, conforme é mostrado na imagem 2, poucos pixels podem ocupar muito espaço).

O sistema Android ajuda você a alcançar essa definição ao fornecer pixels com independência de densidade (dp ou dip) como uma unidade de medida que deve ser usada no lugar de pixels (px).

Saiba mais sobre pixels com independência de densidade.

Bitmaps alternativos

Para garantir que suas imagens tenham a melhor aparência possível em todas as telas, você deve fornecer bitmaps alternativos para corresponder à densidade da tela. Por exemplo, se seu aplicativo fornecer bitmaps somente para telas de densidade média (mdpi), o Android expandirá em telas de alta densidade para que a imagem ocupe o mesmo espaço físico na tela. Isso pode causar artefatos de escalonamento visíveis em bitmaps. Por isso, seu aplicativo deve incluir bitmaps alternativos com uma resolução maior.

Saiba como fornecer bitmaps alternativos.

Gráficos vetoriais

Para tipos de imagens simples (geralmente ícones), você pode evitar a criação de imagens separadas para cada densidade ao usar gráficos vetoriais. Como gráficos vetoriais definem a ilustração com caminhos de linhas geométricos em vez de com pixels, eles podem ser desenhados em qualquer tamanho sem apresentar artefatos de escalonamento.

Saiba mais sobre como usar gráficos vetoriais.

Wear OS, TV, Auto e Chrome OS

As recomendações acima se aplicam a todos os formatos Android, mas, se quiser compilar um aplicativo para dispositivos Wear OS, Android TV, Android Auto ou Chrome OS, será preciso realizar tarefas adicionais.

Cada um desses dispositivos tem o próprio modelo de interação que seu aplicativo deve acomodar. Em alguns casos, como no Wear OS, você deve repensar a experiência do usuário do seu aplicativo e compilar um aplicativo especializado para o dispositivo em questão. Além disso, para oferecer suporte a dispositivos Chrome OS (como o Google Pixelbook), você pode precisar fazer somente pequenas modificações em seu aplicativo existente para oferecer suporte a interações com teclado e mouse e a uma tela muito maior.

Para oferecer suporte a esses dispositivos, consulte os seguintes guias do desenvolvedor:

Incompatibilidade de tela

Apesar de a biblioteca e as ferramentas do Android fornecerem todos os recursos necessários para disponibilizar um aplicativo a todas as configurações de tela, também é possível decidir que você não quer disponibilizar seu aplicativo para algumas configurações de tela devido a algum tipo de incompatibilidade.

Nesse caso, você pode declarar que seu aplicativo oferece suporte somente a telas específicas.