Unterschied zwischen Android-Dimension: pt und dp
Die Dokumentation sagt, dass 160 dp (density-independent) ist gleich 1 Zoll. Und 72 pt ist 1 Zoll. Also ich sehe nicht, warum android-definieren Sie ein dp-Messung während es scheint zu funktionieren genauso wie die Punkte. Kann jemand das erklären? Warum sollte ich verwenden, dp, wenn ich pt?
Kommentar zu dem Problem
Die Android-Dokumentation wurde nun aktualisiert, um entfernen Sie die falsche Aussage, dass 160 dp ist gleich 1 Zoll.
InformationsquelleAutor der Frage Herbert | 2011-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Android-Dokumentation verwendet, um falsch Zustand, 160 dp immer gleich 1 Zoll unabhängig von der Bildschirmauflösung. Dies berichtet als bug, die angenommen wurde und die Dokumentation aktualisiert.
Aus der aktuellen Dokumentation:
160 dp wird NICHT immer gleich 1 Zoll, variiert mit unterschiedlichen Bildschirmgrößen und-Auflösungen. Auf einem Bildschirm mit einer Dichte von 160dpi (mdpi), 160 dp wird gleich 1 Zoll.
1 pt immer gleich 1/72 in, unabhängig von der Bildschirmauflösung.
Die Android Dokumentation für diese ist hier.
UPDATE:
Machte ich eine kleine Anwendung, um zu versuchen und überprüfen Sie die verschiedenen Größen. Es sieht aus wie das was oben ist, ist richtig, zumindest bei der Anzeige auf meinem HTC Aria. Hier ist ein screenshot:
Es ist interessant zu beachten, dass diese Größen NICHT passten genau in das eclipse graphical editor. Die dp-und sp-Größen schwankte, je nach der Größe des Bildschirms und die Auflösung im editor. Hier sind einige screenshots aus dem editor (Links 2.7 in QVGA-regler, rechts ist 10.1 WXGA, gekürzt):
Wäre es interessant zu sehen, ob dieser editor rendert übereinstimmen mit den tatsächlichen Geräten. Kann jemand, ob diese Größen? Ich werde anfügen, meine xml-unten in den Fall, dass jemand will, um zu helfen.
Edit: Hinzugefügt 2 Geräte mehr zu John ' s-Beispiel. Auf der linken Seite ein Samsung Nexus S (OS 2.3.3). Auf der rechten Seite, ein Samsung Galaxy Tab 10.1 (OS 3.1). Keine mods.
Auf dem Nexus S, 160dp ist etwas größer als 1 Zoll. Alle normalen physischen Einheiten (in, mm, pt) sind alle die gleiche Größe. Ich habe es nachgemessen, mit Lineal, und die 160 dp bar ist etwa 1 mm größer als es sein sollte. Während die physikalischen Einheiten sind 1mm kürzer als Sie sein sollten.
Auf der Registerkarte alle bars sind genau die gleichen, und 1mm länger als das, was ich gemessen mit einem Lineal.
InformationsquelleAutor der Antwort John Leehey
Die nuance ist hier, dass 160
dp
(oderdip
) ist etwa 1 Zoll, während 72pt
ist genau 1 Zoll. Der Unterschied ist, wie android wandelt die beiden Einheiten, um Pixel, die abhängig von der Bildschirmauflösung des Geräts.Einem einzigen
dp
ist ein Einzelzimmerpx
auf ein Gerät mit 160 dpi. Android verwendet die "Dichte Eimer" das Gerät fällt in, und multipliziert einen scaler zu konvertierendp
zupx
.dp
zupx
wandelt nach dieser Formel:dp * scaler = px
.Einem einzigen
pt
ist genau 1/72 Zoll auf jeder Bildschirmauflösung. Android wandeltpt
zupx
mit den genauen dpi (xdpi und ydpi) von dem Bildschirm des Geräts.pt
zupx
wandelt nach dieser Formel:pt /72 * dpi = px
.Ein Beispiel nehmen, Anzeige 160
dp
und 72pt
auf einem 160-dpi-Gerät. Einem 160-dpi-Gerät fällt in die mdpi-density-Eimer, mit einem scaler von 1.0. Verwenden Sie die oben stehenden Formeln zu konvertierenpx
.Was auf eine 170-dpi-Gerät? Ein 170-dpi-Gerät fällt in die mdpi-density-Eimer, mit einem scaler von 1,0.
Was auf einem 150-dpi-Gerät? Ein 150-dpi-Gerät fällt in die mdpi-density-Eimer, mit einem scaler von 1,0.
Die moral von der Geschichte ist
dp
hält die genauen Abmessungen und hilft, die performance, so dass eine gewisse körperliche Größe variation in Abhängigkeit von Geräte-Dichte. Auf der anderen Seitept
ist genau die gleiche physikalische Größe auf jeder Dichte, was zu einer unterschiedlichen Höhe derpx
verwendet wird, kann die Leistung beeinträchtigen und verursachen aliasing und Artefakte, die, wenn verwendet, auf Bilder.dp
wird empfohlen, wenn absolut genaue Abmessungen erforderlich sind (Sie haben ein Lineal auf dem Bildschirm, etc).Ich geschrieben habe, einer in die Tiefe gehenden blog auf die Android-dimension-Einheiten, die gibt mehr Infos und Beispiel-code - Verständnis Dichte Unabhängigkeit in Android
InformationsquelleAutor der Antwort Steven Byle
Aus Neugier habe ich versucht, das layout von John ' s Antwort auf meine beiden Geräte: Asus Transformer (10.1) und HTC Legend (3.2). Die Ergebnisse waren ziemlich interessant:
Transformator (beschnitten):
Legende:
InformationsquelleAutor der Antwort howettl
Ich kämpfte mit den Abmessungen, aber ich denke ich habe einen Weg gefunden, es zu betrachten, macht Sinn für mich. Es gibt eine Formel Konvertierung in Wei-Meng Lee ' s "Beginning Android 4 Application Development" (S. 111):
Tatsächliche Pixel = dp * ( dpi /160 ), wo dpi wahlweise 120, 160, 240 oder 320
So, mit dieser Formel, die ich finden kann, welche dpi für mein Handy/emulator am nächsten ist, einer der vier Werte und werde bestimmt das Verhältnis (3/4, 1, 3/2 oder 2) verwendet in der Formel umwandeln dp-zu-Pixel. Es ist mir wichtig, dass dpi in der Formel kann nur annehmen, dass einer dieser vier Werte trotz der tatsächlichen device-pixel-Dichte.
Beziehen: http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density, für ein Nexus S mit einer Pixeldichte von 235 dpi ist die Umrechnung:
Pixel = dp * 3/2
So ein 160dp-Taste, sagen Sie, wäre 240px (ein wenig breiter als ein Zoll mit dem Gerät 235 dpi)
Für ein HTC Legend, mit einer pixel-Dichte von 181 dpi die Formel ist:
Pixel = dp * 1
(da 181 ist am nächsten 160). So, dass 160dp-button wäre 160pixels, oder etwas weniger als ein Zoll auf dem Gerät mit einer Pixeldichte von 181dpi.
Das hilft mir, zu verstehen, die Unrichtigkeit der früheren Android-Dokumentation "1 dp wird immer gleich 1/160in, unabhängig von der Bildschirmauflösung".
Dies sind die zwei wichtigsten Punkte, die ich versuche, in meinem Kopf 🙂
InformationsquelleAutor der Antwort gcbound
pt
Punkte - 1/72 Zoll auf der Grundlage der physikalischen Größe des Bildschirms.
dp
- Density-independent Pixel - eine abstrakte Einheit, die auf der Grundlage der physikalischen Dichte des Bildschirms. Diese Einheiten sind im Verhältnis zu einem 160-dpi-Bildschirm, so ein dp ist ein pixel auf einem 160-dpi-Bildschirm. Das Verhältnis von dp-zu-pixel-ändern der Bildschirmauflösung, aber nicht unbedingt in einem direkten Verhältnis. Hinweis: Der compiler akzeptiert beide "dip" und "dp", "dp" ist mehr im Einklang mit "sp".
InformationsquelleAutor der Antwort Subayan
Entwickler sind daran gewöhnt, die Dinge in Bezug auf Pixel. Density-independent Pixel war Android Weg, um in der Nähe zu dem, was die Entwickler gewohnt sind. , Die being said, Sie sind willkommen zu verwenden, Punkte, Zoll, Millimeter oder, wenn Sie bevorzugen.
InformationsquelleAutor der Antwort CommonsWare
1 dp wird immer gleich 1/160, unabhängig von der Bildschirmauflösung.
Dies ist nicht wahr, wie gezeigt, durch Ihre Anwendung... Einverstanden?
BR
STeN
InformationsquelleAutor der Antwort STeN