Suporte a diferentes densidades

Esta lição mostra como oferecer suporte para diferentes densidades de tela oferecendo recursos diversos e usando unidades de medição independentes de resolução .

Usar pixels independentes de densidade

Uma armadilha comum a ser evitada ao projetar os layouts é usar pixels absolutos para definir distâncias ou tamanhos. Definir dimensões de layout com pixels é um problema, pois diferentes telas têm diferentes densidades de pixels, de maneira que o mesmo número de pixels pode corresponder a diferentes tamanhos físicos nos vários dispositivos. Portanto, ao especificar dimensões, sempre use unidades dp ou sp. Um dp é um pixel independente de densidade que corresponde ao tamanho físico de um pixel em 160 dpi. Um sp é a mesma unidade base, mas é dimensionado pelo tamanho de texto preferencial do usuário (é um pixel independente de escala) e deve ser usado ao definir o tamanho do texto (mas nunca para tamanhos de layout).

Vídeo

DesignBytes: Pixels independentes de densidade


Por exemplo, ao especificar o espaçamento entre duas exibições, use dp em vez de px:

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

Ao especificar o tamanho do texto, sempre use sp:

<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />

Fornecer bitmaps alternativos

Como o Android é executado em dispositivos com uma ampla variedade de densidades de tela, você deve sempre oferecer recursos de bitmap adaptados a cada um dos tipos de densidade generalizados: densidade baixa, média, alta e extra-alta. Isso ajudará a obter uma boa qualidade gráfica e desempenho em todas as densidades de tela.

Para gerar essas imagens, você deve iniciar com o recurso bruto em formato de vetor e gerar as imagens para cada densidade usando a seguinte escala de tamanho:

  • xhdpi: 2,0
  • hdpi: 1,5
  • mdpi: 1,0 (linha de base)
  • ldpi: 0,75

Isso significa que, se você gerar uma imagem 200x200 para dispositivos xhdpi, deverá gerar o mesmo recurso em 150x150 para hdpi, 100x100 para mdpi e, por fim, uma imagem 75x75 para dispositivos ldpi .

Em seguida, coloque os arquivos de imagem gerados no subdiretório adequado em res/ e o sistema escolherá automaticamente o correto com base na densidade da tela do dispositivo onde o aplicativo está sendo executado:

MyProject/
  res/
    drawable-xhdpi/
        awesomeimage.png
    drawable-hdpi/
        awesomeimage.png
    drawable-mdpi/
        awesomeimage.png
    drawable-ldpi/
        awesomeimage.png

Assim, sempre que você referenciar @drawable/awesomeimage, o sistema selecionará o bitmap apropriado baseado no dpi da tela.

Coloque os ícones da tela inicial nas pastas mipmap/.

res/...
    mipmap-ldpi/...
        finished_launcher_asset.png
    mipmap-mdpi/...
        finished_launcher_asset.png
    mipmap-hdpi/...
        finished_launcher_asset.png
    mipmap-xhdpi/...
        finished_launcher_asset.png
    mipmap-xxhdpi/...
        finished_launcher_asset.png
    mipmap-xxxhdpi/...
        finished_launcher_asset.png

Observação: Todos os ícones da tela inicial devem ser colocados nas pastas res/mipmap-[density]/ em vez das pastas drawable/ para garantir que os aplicativos da tela inicial usem o ícone de melhor resolução. Para obter mais informações sobre o uso de pastas mipmap, consulte Visão geral do gerenciamento de projetos.

Para obter mais dicas e orientações sobre a criação de ativos de ícones para aplicativos, consulte Diretrizes para o projeto de ícones.