Qual é a diferença entre as unidades de medida do Android?
- px
- mergulho
- dp
- sp
Qual é a diferença entre as unidades de medida do Android?
Respostas:
Na documentação do desenvolvedor do Android :
px
Pixels - corresponde aos pixels reais na tela.
em
Polegadas - 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 polegada com base no tamanho físico da tela.
Pixels independentes da densidade dp ou dip - uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi, portanto, um dp é um pixel em uma tela de 160 dpi. A proporção de dp para pixel mudará com a densidade da tela, mas não necessariamente na proporção direta. Nota: O compilador aceita "dip" e "dp", embora "dp" seja mais consistente com "sp".
sp Pixels independentes de
escala - é como a unidade dp, mas também é dimensionada pela preferência do tamanho da fonte do usuário. É recomendável que você use esta unidade ao especificar tamanhos de fonte, para que sejam ajustados para a densidade da tela e a preferência do usuário.
De compreensão da independência de densidade no 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 na documentação do Google Design .
dp
que não têm exatamente o mesmo comprimento físico. (Embora esteja próximo.) Consulte o comentário do @ Fraggle sobre o bucket. O que isto significa é que 48dp terá aproximadamente 8 mm (0,3 polegadas), mas poderá variar até 11 mm.
Praticamente tudo sobre isso e como obter o melhor suporte para várias telas de diferentes tamanhos e densidades está muito bem documentado aqui:
Tamanho da tela Tamanho
físico real, medido como a diagonal da tela. Para simplificar, o Android agrupa todos os tamanhos de tela reais em quatro tamanhos generalizados: pequeno, normal, grande e extra-grande.Densidade de tela
O número de pixels dentro de uma área física da tela; geralmente chamado de dpi (pontos por polegada). Por exemplo, uma tela de densidade "baixa" possui menos pixels em uma determinada área física, em comparação com uma tela de densidade "normal" ou "alta". Por simplicidade, o Android agrupa todas as densidades de tela reais em seis densidades generalizadas: baixa, média, alta, extra-alta, extra-extra-alta e extra-extra-extra-alta.Orientação
A orientação da tela do ponto de vista do usuário. É paisagem ou retrato, o que significa que a proporção da tela é ampla ou alta, respectivamente. Esteja ciente de que não apenas dispositivos diferentes operam em orientações diferentes por padrão, mas a orientação pode mudar em tempo de execução quando o usuário gira o dispositivo.Resolução
O número total de pixels físicos em uma tela. Ao adicionar suporte para várias telas, os aplicativos não funcionam diretamente com a resolução; os aplicativos devem se preocupar apenas com o tamanho e a densidade da tela, conforme especificado pelos grupos de tamanho e densidade generalizados.Pixel independente da densidade (dp)
Uma unidade virtual de pixels que você deve usar ao definir o layout da interface do usuário para expressar dimensões ou posição do layout de maneira independente da densidade. O pixel independente da densidade é equivalente a um pixel físico em uma tela de 160 dpi, que é a densidade da linha de base assumida pelo sistema para uma tela de densidade "média". No tempo de execução, o sistema lida com qualquer escalonamento transparente das unidades dp, conforme necessário, com base na densidade real da tela em uso. A conversão de unidades DP 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ê sempre deve usar unidades dp ao definir a interface do usuário do aplicativo, para garantir a exibição adequada da interface do usuário em telas com densidades diferentes.
Se você é sério sobre o desenvolvimento de um aplicativo Android para mais de um tipo de dispositivo, deve ler o documento de desenvolvimento de suporte de telas pelo menos uma vez. Além disso, é sempre bom saber o número real de dispositivos ativos que possuem uma configuração de tela específica.
Vou elaborar mais sobre como exatamente o dp converte em px:
150 x 150 px
imagem ocupará 150 * 150 dp
espaço na tela.150 x 150 px
imagem ocupará 100 * 100 dp
espaço na tela.150x150 px
imagem ocupará 75 * 75 dp
espaço na tela.O contrário: digamos, você deseja adicionar uma imagem ao seu aplicativo e precisa preencher um 100 * 100 dp
controle. Você precisará criar imagens de tamanhos diferentes para os tamanhos de tela compatíveis:
100 * 100 px
imagem para mdpi150 * 150 px
imagem para hdpi200 * 200 px
imagem para xhdpipx - Pixels - o ponto por escala corresponde aos pixels reais na tela.
i - Polegadas - com base no tamanho físico da tela.
mm - milímetros - com base no tamanho físico da tela.
pt - Pontos - 1/72 de polegada com base no tamanho físico da tela.
dp - Pixels independentes da densidade - uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi, portanto, um dp
é um pixel em uma tela de 160 dpi. A proporção de dp para pixel mudará com a densidade da tela, mas não necessariamente na proporção direta. Nota: O compilador aceita ambos dip
e dp
, embora dp
seja mais consistente com sp
.
sp - Pixels independentes de escala - é como a dp
unidade, mas também é dimensionada pela preferência do tamanho da fonte do usuário. É recomendável que você use esta unidade ao especificar tamanhos de fonte, para que sejam ajustados para a densidade da tela e a preferência do usuário.
Tomemos o exemplo de duas telas com o mesmo tamanho, mas uma com densidade de tela de 160 dpi (pontos por polegada, ou seja, pixels por polegada) e a outra com 240 dpi.
Lower resolution screen Higher resolution, same size
Physical Width 1.5 inches 1.5 inches
Dots Per Inch (“dpi”) 160 240
Pixels (=width*dpi) 240 360
Density (factor of baseline 160) 1.0 1.5
Density-independent pixels 240 240
(“dip” or “dp” or “dps”)
Scale-independent pixels
(“sip” or “sp”) Depends on user font size settings same
Além disso, você deve ter um entendimento claro sobre os seguintes conceitos:
Tamanho da tela:
Tamanho físico real, medido como a diagonal da tela. Para simplificar, o Android agrupa todos os tamanhos de tela reais em quatro tamanhos generalizados: pequeno, normal, grande e extra grande.
Densidade da tela:
A quantidade de pixels dentro de uma área física da tela; geralmente chamado de dpi (pontos por polegada). Por exemplo, uma tela de densidade "baixa" possui menos pixels em uma determinada área física, em comparação com uma tela de densidade "normal" ou "alta". Para simplificar, o Android agrupa todas as densidades de tela reais em quatro densidades generalizadas: baixa, média, alta e extra alta.
Orientação:
A orientação da tela do ponto de vista do usuário. É paisagem ou retrato, o que significa que a proporção da tela é ampla ou alta, respectivamente. Esteja ciente de que não apenas dispositivos diferentes operam em orientações diferentes por padrão, mas a orientação pode mudar em tempo de execução quando o usuário gira o dispositivo.
Resolução:
O número total de pixels físicos em uma tela. Ao adicionar suporte para várias telas, os aplicativos não funcionam diretamente com a resolução; os aplicativos devem se preocupar apenas com o tamanho e a densidade da tela, conforme especificado pelos grupos de tamanho e densidade generalizados.
Pixel independente da densidade (dp):
Uma unidade virtual de pixels que você deve usar ao definir o layout da interface do usuário para expressar dimensões ou posição do layout de maneira independente da densidade. O pixel independente da densidade é equivalente a um pixel físico em uma tela de 160 dpi, que é a densidade da linha de base assumida pelo sistema para uma tela de densidade "média". No tempo de execução, o sistema lida com qualquer escalonamento transparente das unidades dp, conforme necessário, com base na densidade real da tela em uso. A conversão de unidades 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ê sempre deve usar unidades dp ao definir a interface do usuário do aplicativo, para garantir a exibição adequada da interface do usuário em telas com densidades diferentes.
Referência: site de desenvolvedores Android
dp
é dip
. Use-o para tudo (margem, preenchimento, etc.).
Use sp
somente para {tamanho do texto}.
Veja a diferença entre px
, dp
e sp
em diferentes tamanhos de tela.
px ou ponto é um pixel na tela física.
dpi são pixels por polegada na tela física e representam a densidade da tela.
O Android fornece nomes alternativos para várias densidades
mergulho ou dp são pixels de densidade-indenpendant , ou seja, eles correspondem a mais ou menos pixels dependendo da densidade física.
sp ou sip é um pixel independente da escala . Eles são redimensionados quando a opção Texto Grande é ativada em Settings>Accessibility
Use sp para o tamanho do texto.
Use dp para todo o resto.
Fonte 3 : (dados da fonte 3 são fornecidos abaixo)
Esses são valores de dimensão definidos em XML. Uma dimensão é especificada com um número seguido por uma unidade de medida. Por exemplo: 10px, 2in, 5sp. As seguintes unidades de medida são suportadas pelo Android:
dp
Pixels independentes da densidade - Uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi (pontos por polegada), na qual 1dp é aproximadamente igual a 1px. Ao executar em uma tela de densidade mais alta, o número de pixels usados para desenhar 1dp é aumentado por um fator apropriado para o dpi da tela. Da mesma forma, quando em uma tela de densidade mais baixa, o número de pixels usados para 1dp é reduzido. A proporção de dp para pixel mudará com a densidade da tela, mas não necessariamente na proporção direta. O uso de unidades de DP (em vez de unidades de px) é uma solução simples para fazer com que as dimensões da vista em seu layout sejam redimensionadas corretamente para diferentes densidades de tela. Em outras palavras, ele fornece consistência para os tamanhos reais dos elementos da interface do usuário em diferentes dispositivos.
sp
Pixels independentes de escala - É como a unidade dp, mas também é dimensionada pela preferência do tamanho da fonte do usuário. É recomendável que você use esta unidade ao especificar tamanhos de fonte, para que sejam ajustados para a densidade da tela e a preferência do usuário.
pt
Pontos - 1/72 de polegada com base no tamanho físico da tela.
px
Pixels - corresponde aos pixels reais na tela. Esta unidade de medida não é recomendada porque a representação real pode variar entre dispositivos; cada dispositivo pode ter um número diferente de pixels por polegada e pode ter mais ou menos pixels totais disponíveis na tela.
milímetros
Milímetros - Com base no tamanho físico da tela.
no
Polegadas - com base no tamanho físico da tela.
Nota: Uma dimensão é um recurso simples que é referenciado usando o valor fornecido no atributo name (não o nome do arquivo XML). Assim, você pode combinar recursos de dimensão com outros recursos simples em um arquivo XML, em um elemento.
Basicamente, o único momento em que o px se aplica é um px, e se você quiser exatamente um pixel na tela, como no caso de um divisor:
Em> 160 dpi, você pode obter 2 a 3 pixels,
Em> 120 dpi, arredonda para 0.
px
Pixels - corresponde aos pixels reais na tela.
dp ou dip
Pixels independentes da densidade - uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi, portanto, um dp é um pixel em uma tela de 160 dpi.
Uso de dp:
Independência de densidade - Seu aplicativo obtém "independência de densidade" quando preserva o tamanho físico (do ponto de vista do usuário) dos elementos da interface do usuário quando exibido em telas com densidades diferentes. (ou seja) A imagem deve ter o mesmo tamanho (não ampliada ou reduzida) em diferentes tipos de tela.
sp
Pixels independentes de escala - é como a unidade dp, mas também é dimensionada pela preferência do tamanho da fonte do usuário.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Uma unidade virtual de pixels que você deve usar ao definir o layout da interface do usuário para expressar dimensões ou posição do layout de maneira independente da densidade. Como descrito acima, o pixel independente da densidade é equivalente a um pixel físico em uma tela de 160 dpi, que é a densidade da linha de base assumida pelo sistema para uma tela de densidade "média". No tempo de execução, o sistema lida com qualquer escalonamento transparente das unidades dp, conforme necessário, com base na densidade real da tela em uso. A conversão de unidades 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ê sempre deve usar unidades dp ao definir a interface do usuário do aplicativo, para garantir a exibição adequada da interface do usuário em telas com densidades diferentes.
Compreender pixel para dp e vice-versa é muito essencial (especialmente para fornecer valores exatos de dp à equipe criativa)
dp = px * 160 / dpi
MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.
HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp
For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
4.7" diagonal
É explicado acima. Tente evitar nos arquivos de layout. Mas existem alguns casos em que px é necessário. por exemplo, linha divisora do ListView. px é melhor aqui para fornecer uma linha de um pixel como divisor para todas as resoluções de tela.
Use sp para tamanhos de fonte. Somente a fonte dentro do aplicativo será alterada enquanto o tamanho das fontes do dispositivo for alterado (ou seja, Vídeo -> Fontes no dispositivo). Se você deseja manter uma fonte de tamanho estático dentro do aplicativo, é possível fornecer a dimensão da fonte no dp. Nesse caso, isso nunca mudará. Os desenvolvedores podem obter esse requisito para algumas telas específicas; para isso, os desenvolvedores podem usar dp em vez de sp. Em todos os outros casos, sp é recomendado.
Você pode ver a diferença entre px
e dp
da imagem abaixo, e também pode descobrir que o px
e dp
não pode garantir os mesmos tamanhos físicos nas diferentes telas.
Qualquer coisa relacionada ao tamanho do texto e aparência deve usar sp
ou pt
. Visto que qualquer coisa relacionada ao tamanho dos controles, layouts etc. deve ser usada com dp
.
Você pode usar os dois dp
e dip
em seus lugares.
Eu usaria apenas dp.
Fala-se muito em usar "sp" para tamanhos de fonte e, embora eu aprecie o argumento, não acho que seja a coisa certa a fazer do ponto de vista do design. Você pode acabar quebrando seu design se o usuário tiver alguma seleção de tamanho de fonte instável e acabar culpando o aplicativo , e não suas próprias escolhas de vida.
Além disso, se você usar um aplicativo de fonte sp em um tablet de 160 dpi, verá que tudo aumenta ... mas sua fonte, que parecerá pequena em comparação. Não é uma boa aparência.
Embora a idéia de fontes "sp" tenha um bom coração, é uma má idéia. Ficar com dp para tudo.
sp
é um fator, certo? Tudo o que afeta dp
também afeta sp
. Dito isso, ainda é preferível especificar tamanhos de fonte usando, em dp
vez de sp
se o seu layout for muito apertado e os tamanhos maiores não couberem - é melhor ter um texto menor do que o usuário deseja que um layout completamente bagunçado. Mas, em primeiro lugar, você sempre deve respeitar a preferência de tamanho de fonte do usuário - mesmo a maior configuração não é TÃO grande.
sp = pixel independente da escala
dp = dip = pixels independentes da densidade
dpi = pontos por polegada
Devemos evitar usar sp .
Devemos usar o dp para suportar várias telas.
Android suporta diferentes resoluções de tela
Um dispositivo ldpi de 120 dp tem 120 pixels em tamanho de 1 polegada.
O mesmo para outras densidades ...
Nós, engenheiros de software, devemos usar esta fórmula de conversão:
pixel = dp * (densidade / 160)
Portanto, o 1 dp do dispositivo de 240 dpi terá = 1 * (240/160) = 3/2 = 1,5 pixels.
E o 1 dp do dispositivo de 480 dpi terá = 1 * (480/160) = 3 pixels.
Usando esse conhecimento de 1,5 e 3 pixels, um engenheiro de software pode projetar layouts para diferentes densidades.
Para verificar os parâmetros da tela de qualquer dispositivo:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
A diferença entre dp
e as sp
unidades mencionadas como " preferência de tamanho de fonte do usuário " pelas respostas copiadas da documentação oficial pode ser vista em tempo de execução, alterando a Settings->Accessibility->Large Text
opção.
Large Text
A opção força o texto a se tornar 1.3
cada vez maior.
private static final float LARGE_FONT_SCALE = 1.3f;
Obviamente, isso pode depender do fornecedor, pois está em pacotes / aplicativos / configurações .
dpi -
px - pixel
pt - pontos
polegadas - em relação ao tamanho físico da tela (1 polegada = 2,54 cm).
mm-milímetro - em relação ao tamanho físico da tela.
sp - pixel independente da escala.
dip -
No padrão, dp e sp são usados. sp para o tamanho da fonte e dp para todo o resto.
Fórmula para conversão de unidades:
px = dp * (dpi / 160);
Density Bucket -> Screen Display => 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
Aqui está a fórmula usada pelo Android:
px = dp * (dpi / 160)
Onde dpi é uma das seguintes densidades de tela. Para uma lista de todas as densidades possíveis, clique aqui
Ele define as constantes "DENSITY_ *".
Tomado daqui .
Isso resolverá muita confusão ao traduzir entre px e dp, se você souber o dpi da tela.
Então, digamos que você queira uma imagem de 60 dp para uma tela hdpi, o tamanho físico do pixel de 60 dp é:
px = 60 * (240 / 160)
Tamanho da tela em Android
são agrupados em categorias small
, medium
,large
, extra large
, double-extra
e triple-extra
. Densidade da tela é a quantidade de pixels dentro de uma área (como polegadas) da tela. Geralmente é medido em pontos por polegada (dpi). A densidade da tela é agrupada em baixa, média, alta e extra alta. Resolução é o número total de pixels na tela.
Fórmula para conversão entre unidades
px = dp * (dpi / 160)
dp para px no dispositivo
O exemplo a seguir pode ajudar a entender melhor. A escala ocorre com base no tamanho do bucket de 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) e 640 (xxxhdpi). A proporção sugerida pelo Google para o design é 3: 4: 6: 8: 12 para ldpi: mdpi: hdpi: xhdpi: xxhdpi
Uma imagem de 150px x 150px ocupará,
- 150 dp X 150 dp de espaço na tela em mdpi
- 100 dp X espaço de tela de 100 dp em hdpi
- 75 dp X 75 dp de espaço na tela em xhdpi
Você pode usar a seguinte calculadora de DPI para corrigir os tamanhos de imagem e outras dimensões quando desejar ter um design de interface do usuário uniforme em todos os dispositivos Android.
/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/
public class DPICalculator {
private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;
private float forDeviceDensity;
private float width;
private float height;
public DPICalculator(float forDeviceDensity, float width, float height){
this.forDeviceDensity = forDeviceDensity;
this.width = width;
this.height = height;
}
public static void main(String... args) {
DPICalculator dpiCalculator = new DPICalculator(240,330,120);
dpiCalculator.calculateDPI();
}
private float getPx(float dp, float value) {
float px = dp * (value / forDeviceDensity );
return px;
}
private void calculateDPI() {
float ldpiW = getPx(LDPI,width);
float ldpiH = getPx(LDPI,height);
float mdpiW = getPx(MDPI,width);
float mdpiH = getPx(MDPI,height);
float hdpiW = getPx(HDPI,width);
float hdpiH = getPx(HDPI,height);
float xdpiW = getPx(XHDPI,width);
float xdpiH = getPx(XHDPI,height);
float xxdpiW = getPx(XXHDPI,width);
float xxdpiH = getPx(XXHDPI,height);
float xxxdpiW = getPx(XXXHDPI,width);
float xxxdpiH = getPx(XXXHDPI,height);
System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);
}
}
Mais informações consulte o link a seguir.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
Por favor, leia a resposta do wiki da comunidade. Abaixo mencionadas estão algumas informações a serem consideradas, além das respostas acima. A maioria dos desenvolvedores do Android sente falta disso ao desenvolver aplicativos, por isso estou adicionando esses pontos.
sp = pixel independente da escala
dp = pixels independentes da densidade
dpi = pixels de densidade
Passei pelas respostas acima ... não as encontrei exatamente corretas. sp para tamanho do texto, dp para limites de layout - padrão. Mas sp para o tamanho do texto interromperá o layout se usado de forma descuidada na maioria dos dispositivos.
sp leva o tamanho do texto do dispositivo, enquanto dp leva o padrão de densidade do dispositivo (nunca mude em um dispositivo). Diga 100sp texto pode ocupar 80% da tela ou 100% da tela, dependendo do tamanho da fonte definido no dispositivo
Você pode usar sp para limites de layout também, ele funcionará :) Nenhum aplicativo padrão usa sp para todo o texto
Use sp e dp para o tamanho do texto, considerando o UX.
Algumas pessoas usam um tamanho enorme de FONT em seu telefone para obter mais legibilidade, fornecendo um texto pequeno e com código embutido será um problema de UX. Coloque sp para texto sempre que necessário, mas certifique-se de que ele não interrompa o layout quando o usuário alterar suas configurações.
Da mesma forma, se você tiver um único aplicativo compatível com todas as dimensões, a adição de recursos xxxhdpi aumenta muito o tamanho do aplicativo. Mas agora os telefones xxxhdpi são comuns, portanto, temos de incluir ativos xxxhdpi para ícones na barra lateral, barra de ferramentas e barra inferior. É melhor mudar para imagens vetoriais para ter imagens uniformes e de melhor qualidade para todos os tamanhos de tela.
Observe também que as pessoas usam fontes personalizadas em seus telefones. Portanto, a falta de uma fonte pode causar problemas de espaçamento e tudo. Digamos que o tamanho do texto 12sp para uma fonte personalizada possa levar alguns pixels a mais que a fonte padrão.
Consulte o site do desenvolvedor do Google para obter screendensities e detalhes de basedensity para android. https://developer.android.com/training/multiscreen/screendensities
Encontrei um bom artigo sobre como projetar a interface do usuário de aplicativos Android para diferentes resoluções de tela e gostaria de deixá-lo aqui apenas para alguém que pesquisa nesta área. Sim, eu sei que isso é descrito de alguma forma nos documentos do Google (e mencionado nas postagens acima), eu li isso, mas não foi bom para mim (sim, posso ser muito estúpido). Não ficou claro para mim como criar layouts capazes de lidar com diferentes tamanhos de tela. Eu odeio o conceito de DP e assim por diante, quando preciso implementar um layout de interface do usuário "flexível" para telas diferentes. (Hey desenvolvedores do iOS - sim, você está certo, é o conceito do Storyboard).
O Android não tem um conceito ruim de interface do usuário, mas carece de recursos do iOS Storyboard, infelizmente. Projetar UI flexível no Android não é algo fácil (na melhor das hipóteses).
Aqui está o artigo que me ajudou a entender o que fazer no Android para criar layouts para diferentes tamanhos de tela:
JMSTUDIO Blog: - Decida o tamanho da tela do aplicativo Android
Como criar interface do usuário para aplicativos Android para diferentes tamanhos de tela
Para projetar uma interface do usuário do aplicativo para diferentes tamanhos de tela, nosso design inicial precisa atender a um espaço mínimo necessário para cada tamanho de tela. O Android define um tamanho mínimo (em dp) para cada tipo de tela generalizado. Aqui está uma diretriz de tamanho de tela para Android. Quando obtemos o tamanho da tela no dp, não basta projetar a interface do usuário do aplicativo Android. Para cada tamanho de tela, precisamos preparar gráficos e imagens de bitmap para cada densidade. Aqui está uma diretriz de densidade de tela do Android.
Para facilitar o cálculo, podemos seguir a taxa de escala 3: 4: 6: 8 entre as quatro densidades generalizadas. Se criarmos uma imagem de 36 × 36 pixels para o dispositivo ldpi, o tamanho das imagens das densidades restantes será 48 × 48 para mdpi, 72 × 72 para hdpi e 96 × 96 para xhdpi.
Como criar uma interface do usuário de aplicativos Android no Photoshop
Muitos designers têm problemas para projetar a interface do usuário do aplicativo Android no photoshop ou outras ferramentas de design gráfico baseadas em pixel por causa da unidade independente de densidade, dp. Designers não sabem como mapear dp para pixel. O Google também não fornece um guia claro de design da interface do usuário do Android para eles, apesar de fornecer uma fórmula básica para tradução de pixels e dp.
Como definição do Android, 1pd é igual a 1px no dispositivo de 160 dpi (mdpi). Por isso, queremos projetar um aplicativo Android para um dispositivo Android xlarge com densidade mdpi, podemos definir o tamanho da nossa interface do usuário em pixels como 960 pixels de largura e 720px de altura; Siga a mesma regra de mapeamento, podemos seguir as diretrizes de design da interface do usuário do tamanho da tela do aplicativo Android:
ADICIONADO : Se você também estiver interessado na interface do usuário "flexível", consulte esta biblioteca: Um SDK do Android que fornece uma nova unidade de tamanho - sdp (dp escalável). Essa unidade de tamanho é dimensionada com o tamanho da tela (isso também é mencionado em uma resposta aqui, sobre a SDP
biblioteca)
ADDED2 O Google finalmente entendeu a utilidade do conceito de interface do usuário da iOS Storeboard e aqui vai o ConstraintLayout
mundo do Android: criar uma interface de usuário responsiva com o ConstraintLayout
1) dp: (density independent pixels)
O número de pixels representados em uma unidade de dp aumentará à medida que a resolução da tela aumentar (quando você tiver mais pontos / pixels por polegada). Por outro lado, em dispositivos com resolução mais baixa, o número de pixels representados na unidade de dp diminuirá. Como esta é uma unidade relativa, ela precisa ter uma linha de base para ser comparada. Essa linha de base é uma tela de 160 dpi. Esta é a equação:px = dp * (dpi / 160).
2) sp: (scale independent pixels)
Esta unidade é dimensionada de acordo com o dpi da tela (semelhante ao dp), bem como a preferência do tamanho da fonte do usuário.
3) px: (pixels)
Pixels ou pontos reais na tela.
Para mais detalhes você pode visitar
Guia do desenvolvedor do Android> Guia do desenvolvedor para Android da Dimension
> Telas
Tamanho da tela no Android são agrupados em categorias ldpi
, mdpi
, hdpi
, xhdpi
, xxhdpi
e xxxhdpi
. Densidade da tela é a quantidade de pixels dentro de uma área (como polegadas) da tela. Geralmente é medido em pontos por polegada ( dpi
).
PX(Pixels):
px
é destinado a pixels absolutos. Isso é usado se você deseja fornecer em termos de pixels absolutos para largura ou altura. Não recomendado.DP/DIP(Density pixels / Density independent pixels):
dip == dp
. Nas versões anteriores do Android, o dip era usado e posteriormente alterado para dp
. Esta é uma alternativa de px
.
Geralmente, nunca usamos px
porque é um valor absoluto. Se você px
definir a largura ou a altura e se o aplicativo estiver sendo baixado em diferentes dispositivos de tamanho de tela, essa exibição não será ampliada conforme o tamanho original da tela.
dp
é altamente recomendável usar no lugar de px
. Use dp
se você quiser mencionar largura e altura para aumentar e encolher dinamicamente com base nos tamanhos da tela.
se dermos dp/dip
, o Android calculará automaticamente o tamanho do pixel com base na tela de 160 pixels.
SP(Scale independent pixels):
dimensionado com base na preferência de tamanho de fonte do usuário. As fontes devem usar sp
.
ao mencionar os tamanhos de fonte adequados para vários tamanhos de tela, use sp
. Isso é semelhante ao dp
.Utilize sp
especialmente para tamanhos de fonte aumentarem e encolherem dinamicamente com base nos tamanhos de tela
A documentação do Android diz:
ao especificar dimensões, sempre use uma
dp
ousp
unidades. Adp
é um pixel independente da densidade que corresponde ao tamanho físico de um pixel em 160dpi
. Ansp
é a mesma unidade base, mas é dimensionada pelo tamanho de texto preferido do usuário (é um pixel independente da escala), portanto, você deve usar essa unidade de medida ao definir o tamanho do texto
A tela de um celular é composta de milhares de pequenos pontos conhecidos como pixels (px) . Um pixel é o menor elemento que faz a imagem. Quanto mais o número de pixels para criar uma imagem ou texto, mais nítido se torna e torna a tela do smartphone mais facilmente legível.
A resolução da tela é medida em termos de número de pixels na tela. A resolução da tela é uma especificação comumente usada na compra de um dispositivo, mas na verdade não é tão útil ao projetar para Android porque pensar em telas em termos de pixels ignora a noção de tamanho físico, o que para um dispositivo de toque é realmente muito importante.
Pixel independente de densidade (dp ou dip) permitem ao designer criar ativos que aparecem da maneira esperada, independentemente da resolução ou densidade do dispositivo de destino.
Um pixel independente da densidade (dp ou dip) é igual a um pixel na densidade da linha de base ou 160 dpi (pontos por polegada).
1 px / 1dp = 160 dpi / 160 dpi
2 px / 1dp = 320 dpi (2x) / 160 dpi
Onde,
dpi é pontos por polegada
Assim, a 320 dpi, 1 dp é igual a 2 px.
Fórmula
px / dp = dpi / 160 dpi
Pontos por polegada (dpi) é uma medida da nitidez (ou seja, a densidade dos pontos iluminados) em uma tela. Os pontos por polegada para uma determinada resolução de imagem diferem com base no tamanho geral da tela, pois o mesmo número de pixels está sendo espalhado por um espaço diferente.
Trabalhar com pixels independentes da densidade nos ajuda a lidar com uma situação como onde você tem dois dispositivos com a mesma resolução de pixels, mas com uma quantidade diferente de espaço. Suponha que, em um caso, um tablet e telefone tenham a mesma resolução de pixel de 1280 por 800 pixels (160 dpi) e 800 por 1280 pixels (320 dpi), respectivamente.
Agora, como um tablet possui densidade de linha de base (160 dpi), seus tamanhos de pixels físicos e independentes de densidade são os mesmos, 1280 por 800. O telefone, por outro lado, tem uma densidade de pixels mais alta, portanto, possui metade do número de pixels independentes de densidade que físico píxeis. Portanto, um telefone tem 400 por 640 pixels independentes de densidade. Portanto, o uso de um pixel independente da densidade facilita a imagem mental desse tablet com muito mais espaço do que o telefone.
Da mesma forma, se você tiver dois dispositivos com tamanho de tela semelhante, mas com densidade de pixels diferente, digamos que um seja de 800 por 1280 pixels (320 dpi) e o outro de 400 por 640 pixels (160 dpi), não precisamos definir totalmente layouts diferentes para esses dois dispositivos, pois podemos medir ativos em termos de pixel independente da densidade, o mesmo para os dois dispositivos.
800 por 1280 pixels (320 dpi) = 400 por 640 pixels independentes de densidade (dp)
400 por 640 pixels (160 dpi) = 400 por 640 pixels independentes de densidade (dp)
Dimensionar pixels independentes (sp) é a unidade preferida para o tamanho da fonte. Para fins de acessibilidade, o Android permite que os usuários personalizem o tamanho da fonte do dispositivo. Os usuários que têm problemas para ler o texto podem aumentar o tamanho da fonte do dispositivo. Normalmente, você pode encontrar essa opção na configuração de exibição em seu telefone ou tablet, em tamanho da fonte. Muitas vezes, também está disponível nas configurações de acessibilidade.
Com pixels independentes de escala, 16 sp é exatamente igual a 16 dp quando o tamanho da fonte do dispositivo é normal ou 100%. Porém, quando o tamanho da fonte do dispositivo for grande, por exemplo, 125%, 16 sp serão convertidos para 20 dp ou 1,25 vezes 16.
Se você usar dp como a unidade para o tamanho da fonte, esse pedaço de texto terá um tamanho físico específico, independentemente de o usuário personalizar o tamanho da fonte do dispositivo. O uso de unidades sp proporcionará uma experiência melhor para pessoas com deficiência visual.
Referência : Udacity , Google
A densidade e a resolução dos pixels da tela variam de acordo com a plataforma. Pixels independentes de dispositivo e pixels escalonáveis são unidades que fornecem uma maneira flexível de acomodar um design entre plataformas.
O número de pixels que cabem em uma polegada é chamado de densidade de pixels. As telas de alta densidade têm mais pixels por polegada do que as de baixa densidade ....
O número de pixels que cabem em uma polegada é chamado de densidade de pixels. Telas de alta densidade têm mais pixels por polegada do que as de baixa densidade. Como resultado, os elementos da interface do usuário com as mesmas dimensões de pixel parecem maiores em telas de baixa densidade e menores em telas de alta densidade.
Para calcular a densidade da tela, você pode usar esta equação:
Densidade da tela = Largura (ou altura) da tela em pixels / Largura (ou altura) da tela em polegadas
A densidade e a resolução dos pixels da tela variam de acordo com a plataforma. Pixels independentes de dispositivo e pixels escalonáveis são unidades que fornecem uma maneira flexível de acomodar um design entre plataformas.
Calculando a densidade de pixels O número de pixels que cabem em uma polegada é chamado de densidade de pixels . As telas de alta densidade têm mais pixels por polegada do que as de baixa densidade ....
Independência de densidade refere-se à exibição uniforme de elementos da interface do usuário em telas com densidades diferentes.
Pixels independentes da densidade , escritos como dp (pronuncia-se " dips "), são unidades flexíveis que são dimensionadas para ter dimensões uniformes em qualquer tela. As UIs de materiais usam pixels independentes da densidade para exibir elementos de maneira consistente em telas com densidades diferentes.
Leia o texto completo https://material.io/design/layout/pixel-density.html
Pixels (px) - corresponde aos pixels reais na tela. Isso é usado se você deseja fornecer em termos de pixels absolutos para largura ou altura.
Pixels independentes da densidade (dp ou dip) - uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi, portanto, um dp é um pixel em uma tela de 160 dpi. A proporção de dp para pixel mudará com a densidade da tela, mas não necessariamente na proporção direta. Nota: O compilador aceita "dip" e "dp", embora "dp" seja mais consistente com "sp".
Pixels independentes de escala (sp) - é como a unidade dp, mas também é dimensionada pela preferência do tamanho da fonte do usuário. É recomendável usar esta unidade ao especificar tamanhos de fonte, para que sejam ajustados para a densidade da tela e a preferência do usuário.
Sempre use apenas dp e sp. sp para tamanhos de fonte e dp para todo o resto. Tornará a interface do usuário compatível para dispositivos Android com diferentes densidades. Você pode saber mais sobre pixel e dp em https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-
URL de origem: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/
Quero fornecer uma maneira fácil de entender dp
. Na verdade, acho que dp
é o mais fácil de entender. dp
é apenas uma unidade de comprimento físico. É da mesma dimensão que mm
ou inch
. É apenas conveniente escrever 50dp
, em 60dp
vez de 50/160 inch
ou 60/160 inch
porque um dp
é exatamente 1/160 inch
o tamanho ou a resolução da tela.
O único problema é que, o dpi android de algumas telas não é preciso. Por exemplo, uma tela classificada em 160 dpi pode ter 170 dpi. Portanto, o resultado da computação dp
é nebuloso. Deve ser aproximadamente o mesmo que 1/160 inch
.