Qual é a diferença entre as unidades de medida do Android?
Do Documentação do Desenvolvedor Android:
**px* Pixels** - corresponde aos pixels reais na tela.
em** Inches*** - com base no tamanho físico da tela.
1 Polegada = 2,54 centímetros
**mm* Milímetros** - com base no tamanho físico da tela.
**pt* Pontos** - 1/72 de uma polegada com base no tamanho físico da tela.
dp ou dip **Densidade*** independente de Pixels - uma unidade abstrata que se baseia na densidade física da tela. Estas unidades são relativas a um 160 dpi screen, então um dp é um pixel em uma tela de 160 dpi. A proporção de dp-to-pixel irá mudar com a densidade da tela, mas não necessariamente em proporção directa. Nota: O compilador aceita tanto o "dip" como "dp", embora "dp" seja mais consistente com "sp".
**sp* Escala** Pixels independentes - isto é como a unidade dp, mas também é escalado pela preferência do tamanho da fonte do usuário. É recomendado que você utilizar esta unidade ao especificar os tamanhos das fontes, para que sejam ajustados tanto para a densidade da tela quanto para a preferência do usuário.
From Understanding Density Independence In Android:
+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size |
+----------------+----------------+---------------+-------------------------------+
| ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px |
+----------------+----------------+---------------+-------------------------------+
| mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px |
+----------------+----------------+---------------+-------------------------------+
| hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px |
+----------------+----------------+---------------+-------------------------------+
| xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px |
+----------------+----------------+---------------+-------------------------------+
| xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px |
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px |
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit | Description | Units Per | Density | Same Physical Size |
| | | Physical Inch | Independent | On Every Screen |
+---------+-------------+---------------+-------------+--------------------+
| px | Pixels | Varies | No | No |
+---------+-------------+---------------+-------------+--------------------+
| in | Inches | 1 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| mm | Millimeters | 25.4 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| pt | Points | 72 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| dp | Density | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
| sp | Scale | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
Mais informações também podem ser encontradas no Google Design Documentation.
Praticamente tudo sobre isso e como conseguir o melhor suporte para múltiplos ecrãs de diferentes tamanhos e densidades está muito bem documentado aqui:
**Tamanho da tela***br/> Tamanho físico real, medido como a diagonal da tela. Para simplificar, o Android agrupa todos os tamanhos reais da tela em quatro tamanhos generalizados: pequeno, normal, grande, e extra-grande.
**Densidade da tela***br/> O número de pixels dentro de uma área física do tela; geralmente referido como dpi (dots per inch). Por exemplo, um tela de "baixa" densidade tem menos pixels dentro de uma determinada área física, em comparação com uma tela de densidade "normal" ou "alta". Para simplificar, O Android agrupa todas as densidades reais de tela em seis densidades generalizadas densidades: baixa, média, alta, extra-alta, extra-extra-alta, e extra-extra-extra-extra-extra-alto.
**Orientação***br/>A orientação da tela do ponto de vista do usuário vista. Isto ou é paisagem ou retrato, o que significa que a tela é é larga ou alta, respectivamente. Esteja ciente de que não só fazem diferentes dispositivos operar em diferentes orientações por padrão, mas a orientação pode mudar no momento da execução quando o usuário faz girar o dispositivo.
Resolução**br/> O número total de pixels físicos em uma tela. Ao adicionar suporte para várias telas, as aplicações fazem não trabalhar directamente com resolução; as aplicações devem estar relacionadas apenas com tamanho e densidade de tela, conforme especificado pelo tamanho e grupos de densidade.
Pixel independente de densidade (dp)
Um virtual unidade de pixel que você deve usar ao definir o layout da interface de usuário, para expressar dimensões do layout ou posição de uma forma independente da densidade. O pixel independente da densidade é equivalente a um pixel físico em um 160 tela de dpi, que é a densidade de base assumida pelo sistema para um tela de densidade "média". Em tempo de execução, o sistema manipula de forma transparente qualquer dimensionamento das unidades dp, conforme necessário, com base na densidade real da tela em uso. A conversão de unidades de dp em pixels da tela é simples:px = dp * (dpi / 160)
. Por exemplo, em uma tela de 240 dpi, 1 dp é igual a 1,5 pixels físicos. Você deve sempre usar unidades dp quando definindo a IU da sua aplicação, para garantir a exibição adequada da sua IU em telas com densidades diferentes.
Se você está levando a sério o desenvolvimento de um aplicativo Android para mais de um tipo de dispositivo, você deve ter lido o documento de desenvolvimento de suporte a telas pelo menos uma vez. Além disso, é sempre bom saber o número real de dispositivos ativos que têm uma determinada configuração de tela.
Eu vou elaborar mais sobre como exatamente a dp converte para px:
150 x 150 px
ocupará 150 * 150 dp
de espaço na tela.150 x 150 px
ocupará 100 * 100 dp
de espaço na tela.150x150 px
ocupará 75 * 75 dp
de espaço na tela.Ao contrário: digamos, você quer adicionar uma imagem à sua aplicação e precisa dela para preencher um controle de 100 * 100 dp
. Você precisará criar imagens de tamanhos diferentes para os tamanhos de tela suportados:
100 * 100 px
imagem para mdpi150 * 150 px
imagem para hdpi200 * 200 px
imagem para xhdpi