2011-01-16 4 views
6

ich bin durchgehend durch Dips auf Android verwirrt.Grundlagen der geräteunabhängigen Pixel

Ich verstehe aus der Referenz, dass die Basis für dp-Werte 160 ist. Also, sollte nicht 80dp Breite entspricht einer Ansicht mit einer Breite von 50% des Bildschirms? Auf meinem Nexus One ist die Breite in dp etwas um 300dp, wie es scheint.

Was fehlt mir hier?

thx im Voraus

Antwort

5

160 dots per inch . Also 80dp wären ungefähr 1/2 Zoll groß.

+0

OP fragt nach Dip, nicht nach dpi. – Ying

+0

Sie sind verwandt. Er erwähnte 160 als Basiswert - dieser Wert ist die Dichte in DPI. – kcoppock

+0

Sie haben Recht - ich habe diese Antwort nicht sorgfältig gelesen. – Ying

16

„dp“ == „dichteunabhängige Pixel“ (Dies ist auch, warum es früher „dip“ genannt wurde, obwohl ich „dp“ in diesen Tagen zu bevorzugen.)

Denken Sie daran, wie andere Einheiten - "in" (Zoll), "mm" (Millimeter), usw. Sie können eine Größe angeben, die auf der Dichte des Bildschirms basiert.

Wir definieren mdpi als Grunddichte, also ergibt "10dp" auf einem mdpi-Bildschirm genau 10 Pixel. Auf einem HDPI-Bildschirm ergeben sich 15 Pixel, da hdpi 1,5 * mdpi beträgt.

Beachten Sie, dass, obwohl die Konstanten für verschiedene Dichten DPI ähnlich sind (mdpi ist 160, usw.), Dichte nicht genau DPI ist. Es handelt sich um einen abstrakten Skalierungsfaktor, der die Bildschirmauflösung anpasst, jedoch nicht genau widerspiegelt. (Sie würden "in", "mm" usw. für exakte Größen verwenden, aber 99,9% ist das nicht, was Sie wollen, also bleiben Sie bei "dp".) Dies vereinfacht das Leben für alle erheblich, da Sie nicht mit vielen Android umgehen müssen Geräte mit einem etwas anderen Platzbedarf für die Benutzeroberfläche, da sie jeweils geringfügig unterschiedliche Bildschirm-DPIs aufweisen. Außerdem können Gerätehersteller die Dichte ihres Geräts auswählen, um eine gewünschte Benutzeroberfläche zu erhalten - zum Beispiel verwendet das Samsung Tab eine Dichte, die um ein Vielfaches größer ist als die tatsächliche DPI, was zu einer insgesamt größeren Benutzeroberfläche führt.

+4

"Das vereinfacht das Leben für alle" - außer es nicht. Es macht das Leben schwieriger für alle - weil Dips nicht funktionieren (sie sind so sehr verschieden auf vielen Hardware-Teilen, jetzt, wo sie nutzlos sind). Google sagt immer noch, dip für alle UI zu verwenden, aber das ist unmöglich, da es bei 30% aller Handys zu falschen Ergebnissen führt (ich bin hier auf der Suche nach einer Lösung, enttäuscht, keine gefunden zu haben). – Adam

0

Dichteunabhängige Pixel (kurz: dp) sind eine virtuelle Pixeleinheit, die zur Laufzeit Ihrer Anwendung ermittelt wird.

Format: 1 dp = 1 Pixel auf 160 dpi Bildschirm. Also 160 dpi ist die Grunddichte für das System.

Die Konvertierung von dp-Einheiten in Bildschirmpixel ist ziemlich einfach. Actual Gerätepixeln (Pixel) = dp (1) * (dpi (der Vorrichtung)/160 (Baseline)) Aus Gründen der Einfachheit: px = dp * (dpi/160)

Beispiel: Wenn Ein 240-dpi-Gerät startet Ihre App, dann entspricht 1 DP 1,5 tatsächlichen Gerätepixeln.

Fazit: DP behandelt automatisch jede Skalierung auf größere oder kleinere Geräte. Die Zeiten, in denen Sie die Pixel fest codieren, sind vorbei. DP sorgt für die richtige Skalierung bei unterschiedlichen Bildschirmdichten.