Was ist der Unterschied zwischen "px", "dip", "dp" und "sp"?

Was ist der Unterschied zwischen den Android-Maßeinheiten?

  • px
  • dip
  • dp
  • sp
Lösung

Aus der [Android Developer Documentation] (http://developer.android.com/guide/topics/resources/more-resources.html#Dimension):

  1. px Pixels - entspricht den tatsächlichen Pixeln auf dem Bildschirm.

  2. in Zoll - basiert auf der physischen Größe des Bildschirms.
    1 Zoll = 2,54 Zentimeter

  3. mm Millimeter - basierend auf der physischen Größe des Bildschirms.

  4. pt Punkte - 1/72 eines Zolls, basierend auf der physischen Größe des Bildschirms.

  5. dp oder dip Dichte-unabhängige Pixel - eine abstrakte Einheit, die auf der physikalischen Dichte des Bildschirms basiert. Diese Einheiten sind relativ zu einem 160 dpi-Bildschirm, d. h. ein dp ist ein Pixel auf einem 160-dpi-Bildschirm. Das Verhältnis von dp-zu-Pixel ändert sich mit der Bildschirmdichte, aber nicht unbedingt in direktem Verhältnis. Hinweis: Der Compiler akzeptiert sowohl "dip" als auch "dp", obwohl "dp" besser mit "sp" vereinbar ist.

  6. sp Scale-independent Pixels - dies ist wie die dp-Einheit, aber es ist auch skaliert durch den Benutzer die Schriftgröße Präferenz. Es wird empfohlen, dass Sie diese Einheit zu verwenden, wenn Sie die Schriftgröße angeben, damit sie an die Bildschirmdichte und die Präferenz des Benutzers angepasst.

Aus [Understanding Density Independence In Android] (https://www.captechconsulting.com/blogs/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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Weitere Informationen sind auch in der Google Design Dokumentation zu finden.

Kommentare (11)

So ziemlich alles darüber und wie man die beste Unterstützung für mehrere Bildschirme unterschiedlicher Größe und Dichte erreicht, ist hier sehr gut dokumentiert:

Bildschirmgröße
Tatsächliche physische Größe, gemessen als Bildschirmdiagonale. Der Einfachheit halber gruppiert Android alle tatsächlichen Bildschirmgrößen in vier allgemeine Größen: klein, normal, groß und extragroß.

Bildschirmdichte
Die Anzahl der Pixel innerhalb eines physischen Bereichs des Bildschirms; wird normalerweise als dpi (dots per inch) bezeichnet. Zum Beispiel hat ein "niedrige" Bildschirmdichte hat weniger Pixel innerhalb einer bestimmten Fläche, im Vergleich zu einem Bildschirm mit "normaler" oder "hoher" Dichte. Der Einfachheit halber, gruppiert Android alle tatsächlichen Bildschirmdichten in sechs allgemeine Dichten: niedrig, mittel, hoch, extra-hoch, extra-extra-hoch und extra-extra-extra-hoch.

Orientierung
Die Ausrichtung des Bildschirms aus Sicht des Benutzers Blickwinkel. Dies ist entweder Quer- oder Hochformat, was bedeutet, dass das Seitenverhältnis des Bildschirms Seitenverhältnis des Bildschirms entweder breit oder hoch ist. Beachten Sie, dass nicht nur nicht nur verschiedene Geräte standardmäßig in verschiedenen Ausrichtungen arbeiten Standardausrichtung arbeiten, sondern sich die Ausrichtung zur Laufzeit ändern kann, wenn der Benutzer das Gerät dreht.

Auflösung
Die Gesamtzahl der physischen Pixel auf einem Bildschirm. Wenn Unterstützung für mehrere Bildschirme hinzugefügt wird, arbeiten Anwendungen nicht direkt mit der Auflösung arbeiten; Anwendungen sollten sich Anwendungen sollten sich nur mit der Größe und Dichte des Bildschirms befassen, wie sie durch die generalisierten Gruppen > Größe und Dichte.

Dichte-unabhängiges Pixel (dp)
Eine virtuelle Pixeleinheit, die Sie bei der Definition des UI-Layouts verwenden sollten, um die Layout-Dimensionen oder Position auf eine dichteunabhängige Weise auszudrücken. Der dichteunabhängige Pixel entspricht einem physikalischen Pixel auf einem 160 dpi-Bildschirm, was die vom System angenommene Basisdichte für einen "mittlere" Bildschirmdichte. Zur Laufzeit handhabt das System auf transparente Weise jede Skalierung der dp-Einheiten, die auf der tatsächlichen Dichte des des verwendeten Bildschirms. Die Umrechnung von dp-Einheiten in Bildschirmpixel ist einfach: "px = dp * (dpi / 160)". Auf einem 240-dpi-Bildschirm entspricht 1 dp zum Beispiel 1,5 physischen Pixeln gleich. Sie sollten immer dp-Einheiten verwenden, wenn Sie Sie sollten immer dp-Einheiten verwenden, wenn Sie die Benutzeroberfläche Ihrer Anwendung > definieren, um die korrekte Anzeige Ihrer Benutzeroberfläche auf Bildschirmen mit unterschiedlichen Dichten zu gewährleisten.

Wenn Sie ernsthaft vorhaben, eine Android-Anwendung für mehr als einen Gerätetyp zu entwickeln, sollten Sie das Dokument zur Unterstützung der Entwicklung von Bildschirmen mindestens einmal gelesen haben. Darüber hinaus ist es immer gut, die tatsächliche Anzahl der aktiven Geräte mit einer bestimmten Bildschirmkonfiguration zu kennen.

Kommentare (5)

Ich werde näher darauf eingehen, wie genau dp in px umgewandelt wird:

  • Wenn es auf einem mdpi-Gerät läuft, nimmt ein 150 x 150 px großes Bild 150 * 150 dp Platz auf dem Bildschirm ein.
  • Wenn es auf einem hdpi-Gerät läuft, nimmt ein Bild mit 150 x 150 Pixeln 100 * 100 dp Platz auf dem Bildschirm ein.
  • Wenn es auf einem xhdpi-Gerät läuft, nimmt ein Bild mit 150 x 150 Pixeln 75 * 75 dp Platz auf dem Bildschirm ein.

Andersherum: Nehmen wir an, Sie wollen ein Bild in Ihre Anwendung einfügen und es soll ein 100 * 100 dp Steuerelement ausfüllen. Sie müssen Bilder unterschiedlicher Größe für die unterstützten Bildschirmgrößen erstellen:

  • Bild 100 * 100 px für mdpi
  • 150 * 150 px"-Bild für hdpi
  • 200 * 200 px Bild für xhdpi
Kommentare (4)