Explicamos a essência do Screen Density (Density Buckets) no Android — a classificação de telas por densidade de pixels: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density determina quantos pixels físicos cabem em uma polegada de tela e afeta diretamente como imagens e interface são exibidas em diferentes dispositivos. De acordo com o Google Android Compatibility Definition (2025), o Android suporta 6 Density Buckets principais e até 8 adicionais para dispositivos dobráveis.
Principais conclusões
Screen Density é o número de pixels físicos por polegada de tela (ppi — pixels por polegada, ou dpi — pontos por polegada). O Android usa o conceito de Density Buckets — grupos de telas com densidade similar que usam os mesmos fatores de escala. Ao contrário da resolução (número de pixels em largura e altura), a densidade determina o tamanho físico de um pixel na tela. De acordo com o Google Pixel Team (2025), a densidade dos flagships modernos é de 450-550 ppi, o que corresponde ao bucket xxhdpi-xxxhdpi.
O sistema de Density Buckets apareceu no Android 1.6 Donut (2009) com os primeiros dispositivos a 160 dpi (mdpi). Com o crescimento das resoluções de tela, novos buckets foram adicionados: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Cada novo bucket refletia um aumento de 1.5× ou 2× na densidade em relação ao anterior. De acordo com o Android Open Source Project (2025), 96% dos dispositivos Android ativos agora têm densidades variando de hdpi a xxxhdpi.
Density Buckets são faixas de densidade definidas pelo Google para agrupar telas Android. O bucket base é mdpi (160 dpi). O fator de escala mostra quantas vezes maior é um recurso para um determinado bucket em comparação com mdpi. Por exemplo, xhdpi (2×) significa que a imagem deve ser 2 vezes maior em largura e altura que sua versão mdpi. De acordo com o Android Studio Resource Manager (2025), xxhdpi é o bucket mais comum entre dispositivos ativos (38% de participação de mercado), seguido por xhdpi (28%).
| Bucket | Faixa DPI | Escala | Exemplo de dispositivo | Participação (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Dispositivos econômicos antigos | Menos de 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), tablets 7" | 3% |
| hdpi | 160-240 dpi | 1.5× | Samsung Galaxy S2, Nexus 4 | 12% |
| xhdpi | 240-320 dpi | 2× | Google Nexus 5, Moto G | 28% |
| xxhdpi | 320-480 dpi | 3× | Samsung Galaxy S8, Pixel 3 | 38% |
| xxxhdpi | 480-640 dpi | 4× | Samsung Galaxy S24 Ultra, Pixel 9 Pro | 18% |
Resolução de tela é o número total de pixels em largura e altura (ex: 1080×2400). Densidade de tela é o número de pixels por polegada. Dois dispositivos com a mesma resolução podem ter densidades diferentes se seus tamanhos físicos de tela diferirem. Por exemplo, um telefone de 6 polegadas com resolução 1080×2400 tem densidade de cerca de 440 dpi (xxhdpi), enquanto um telefone de 5 polegadas com a mesma resolução tem cerca de 530 dpi (xxxhdpi). Esta é uma diferença chave: a interface deve se adaptar não à resolução, mas à densidade, caso contrário os elementos serão muito pequenos em dispositivos de alta densidade.
O Android usa qualificadores nos nomes das pastas res para carregar recursos para uma densidade de tela específica: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Quando o aplicativo inicia, o Android seleciona recursos da pasta que melhor corresponde à densidade do dispositivo. Se não houver correspondência exata, o sistema usa o bucket mais próximo ou dimensiona um recurso de uma densidade inferior. De acordo com Android Docs (2025), qualificadores de densidade não são necessários para vetores (VectorDrawable) — eles são dimensionados automaticamente.
/res/
drawable-mdpi/
icon_app.png (48x48 px)
drawable-hdpi/
icon_app.png (72x72 px)
drawable-xhdpi/
icon_app.png (96x96 px)
drawable-xxhdpi/
icon_app.png (144x144 px)
drawable-xxxhdpi/
icon_app.png (192x192 px)
Nessa estrutura, cada pasta contém o mesmo ícone, mas em um tamanho físico de pixel diferente. O tamanho base de 48×48 pixels para mdpi é multiplicado pelo fator de escala para cada bucket. O Android seleciona automaticamente o arquivo correto com base no DisplayMetrics.density do dispositivo. Para VectorDrawable (formato XML), um único arquivo em drawable/ é suficiente — o sistema o dimensiona sem perda de qualidade.
Calcular o tamanho de uma imagem para cada densidade é baseado em uma fórmula simples: tamanho em mdpi × fator de escala. Se um ícone em mdpi tem 48×48 px, então para hdpi será 72×72 px (48 × 1.5), para xhdpi — 96×96 px (48 × 2), para xxhdpi — 144×144 px (48 × 3), para xxxhdpi — 192×192 px (48 × 4). De acordo com as Material Design Guidelines (2025), esta fórmula se aplica a todos os recursos raster: ícones, fundos, imagens e 9-patch.
| Bucket | Escala | Tamanho mdpi (px) | Tamanho no bucket (px) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 48×48 |
| hdpi | 1.5× | 48×48 | 72×72 |
| xhdpi | 2× | 48×48 | 96×96 |
| xxhdpi | 3× | 48×48 | 144×144 |
| xxxhdpi | 4× | 48×48 | 192×192 |
A preparação adequada de recursos para Density Buckets inclui cinco regras principais. Primeiro, use VectorDrawable para ícones simples — isso elimina a necessidade de cinco cópias. Segundo, para imagens raster, exporte todas as densidades das ferramentas de design (Android Studio Asset Studio gera automaticamente). Terceiro, evite colocar imagens em drawable/ sem qualificador — o sistema as dimensionará com perda de qualidade. Quarto, teste em um dispositivo com densidade diferente da sua principal — o emulador permite alterar a densidade. Quinto, use WebP em vez de PNG — de acordo com o Google (2025), o WebP oferece tamanho 25-35% menor com a mesma qualidade.
Perguntas frequentes
mdpi (medium-density pixel-independent) — o bucket de densidade base no Android com densidade de 160 dpi. Todos os outros buckets são calculados em relação ao mdpi: hdpi — 1.5×, xhdpi — 2×, e assim por diante. mdpi corresponde a um pixel físico por pixel independente de densidade (dp). Designers usam mdpi como referência ao criar layouts.
Use DisplayMetrics: getResources().getDisplayMetrics().density retorna o fator de escala (1.0 para mdpi, 3.0 para xxhdpi). Para determinar programaticamente o bucket, chame getResources().getConfiguration().densityDpi. O Android Studio também tem um Device Explorer que mostra densityDpi para dispositivos conectados.
Tecnicamente — sim, mas com perda de qualidade. Se um recurso está disponível apenas em drawable-xxhdpi, em um dispositivo mdpi ele será reduzido 3× — a imagem ficará borrada. Se o recurso está apenas em mdpi, em xxhdpi ele será ampliado — pixelização. Recomenda-se preparar pelo menos para xhdpi, xxhdpi e xxxhdpi — isso cobre 84% dos dispositivos ativos (2025). Para VectorDrawable, um único arquivo sem qualificador é suficiente.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também