wake-up-neo.com

Wie hängen dp, dip, dpi, ppi, Pixel und Zoll zusammen?

Ich las dp, dip, px, sp Messungen , habe aber noch einige Fragen zu dp/dpi vs ppi vs px vs inch. Ich kann sie nicht vergleichen ... ist ein Zoll der größte? 

Sie sagen, 160 dpi bedeutet 160 Pixel pro Zoll. Bedeutet das, dass 1 Zoll 160 Pixel enthält? 

Sie sagen auch 1 Pixel auf einem 160 dpi-Bildschirm = 1 dp. Bedeutet das, dass 1 Pixel und 1 dp gleich sind?

Und warum sollten wir dp anstelle von px verwenden? Ich verstehe, dass es ideal ist, aber warum?

24
Chandeep

Sie sollten (fast) immer flexible Größeneinheiten verwenden, wie dp, dichtenunabhängige Pixel, da 300px auf einem Gerät nicht unbedingt die gleiche Bildschirmfläche wie 300px auf einem anderen Gerät ist. Die größte praktische Auswirkung ist, dass Ihr Layout auf Geräten mit einer anderen Dichte deutlich anders aussieht als der, auf den Ihr Design abzielt.

  • dp oder dip bedeutet dichtenunabhängige Pixel
  • dpi oder ppi bedeutet Punkte (oder Pixel) pro Zoll
  • inch ist eine physikalische Messung, die mit der tatsächlichen Bildschirmgröße verbunden ist
  • px bedeutet Pixel - ein Pixel füllt einen beliebigen Bildschirmbereich in Abhängigkeit von der Dichte.

Beispielsweise auf einem 160dpi-Bildschirm 1dp == 1px == 1/160in, aber auf einem 240dpi-Bildschirm 1dp == 1.5px. Also nein, 1dp != 1px. Es gibt genau einen Fall wenn 1dp == 1px, und das ist auf einem 160dpi-Bildschirm. Physikalische Maßeinheiten wie Zoll sollten niemals Teil Ihres Designs sein - das heißt, es sei denn, Sie erstellen ein Lineal.

Eine einfache Formel zur Bestimmung, wie viele Pixel 1dp auskommt, ist px = dp * (dpi / 160).

42
Chris Cashwell

dp ist ein physikalisches Maß wie Zoll. (Ja, das ist es. Lesen Sie weiter.)

"Ein dp entspricht der physischen Größe eines Pixels bei 160 dpi" ( https://developer.Android.com/training/multiscreen/screendensities.html#TaskUseD )

Die physikalische Größe eines Pixels bei 160 dpi beträgt genau 1/160 Zoll. Daher ist die Größe eines dp 1/16 eines Zolls. 160 dp = 1 Zoll. 

Px ist eine etwas willkürliche Maßeinheit auf einem Bildschirm.

Beispiele dafür, was dp auf verschiedenen Geräten in px konvertiert, finden Sie hier:

https://stackoverflow.com/a/39495538/984003

5
user984003

Wie hängen dp, dip, dpi, ppi, Pixel und Zoll zusammen?

Zum Zwecke der Android-Entwicklung:

dp = dip
dpi = ppi
inch x dpi = pixels
dp = 160 x inch
dp = 160*pixels/dpi

Also auf einem 160-dpi-Telefon (mdpi):

2 inches = 320 dp
2 inches = 320 pixels

Auf einem 180-dpi-Telefon:

2 inches = 320 dp
2 inches = 360 pixels

Beachten Sie, dass 2 Zoll IMMER 320dp ist, unabhängig von der Bildschirmgröße. Ein dp ist eine physikalische Entfernung von 1/16 Zoll.

Die dp-zu-Pixel-Formel ist interessant:

dp = 160*pixels/dpi

Ist äquivalent zu:

dp = pixels/(dpi/160)

dpi/160 ist ein interessanter Faktor. Es ist die relative Dichte im Vergleich zur Android-Mdpi-Bin und der Betrag, um den Sie Ihre Grafiken für die verschiedenen Ressourcen-Bins skalieren müssen. Dieser Faktor wird einige Male auf this page erwähnt, wobei 0,75 der Faktor für ldpi ist.

4
Sam

DP ist die Auflösung, wenn Sie nur die physische Größe des Bildschirms berücksichtigen. Wenn Sie DP verwenden, wird Ihr Layout auf andere Bildschirme ähnlicher Größe mit unterschiedlichen Pixeldichten skaliert.

Manchmal möchten Sie tatsächlich Pixel, und wenn Sie mit Dimensionen im Code arbeiten, haben Sie immer echte Pixel, es sei denn, Sie konvertieren sie.

0

Ich werde es an einem Beispiel erklären.

float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

dichte gleich

.75 on ldpi (120 dpi)
1.0 on mdpi (160 dpi; baseline)
1.5 on hdpi (240 dpi)
2.0 on xhdpi (320 dpi)
3.0 on xxhdpi (480 dpi)
4.0 on xxxhdpi (640 dpi)

so zum Beispiel

Ich habe ein Samsung S5 mit 432 dpi ( http://dpi.lv/#[email protected] ).

Also, density = 432/160 = phone's dpi/baseline = 2.7

Angenommen, meine oberste Leiste ist 48dp. Dies ist auf baseline (160dpi) verwiesen.

Also, mit meinem S5 wird es 48dp * 2.7 sein.

Dann, wenn ich die tatsächliche Höhe sehen möchte:

Es wird (48dp * 2.7) / 432 dpi = 0.3 inches sein.

0
kalan