Erklären die Grundlagen von dp (dichteunabhängiges Pixel) — eine Maßeinheit in Android, die die gleiche physikalische Größe von UI-Elementen auf Bildschirmen mit unterschiedlicher Pixeldichte gewährleistet. Ein dp entspricht immer 1/160 Zoll auf dem Bildschirm, unabhängig davon, ob das Gerät eine hohe oder niedrige Auflösung hat. Laut Google Material Design (2025) sollten alle Abmessungen in Android-Anwendungen in dp und nicht in px angegeben werden, da die Oberfläche sonst auf verschiedenen Geräten unterschiedlich aussieht.
Wichtige Punkte
dp (dichteunabhängiges Pixel) ist eine virtuelle Maßeinheit in Android, die eingeführt wurde, um die Größen von UI-Elementen auf Geräten mit unterschiedlicher Pixeldichte zu vereinheitlichen. Ein dp entspricht ungefähr einem physischen Pixel auf einem Bildschirm mit 160 dpi Dichte (mdpi). Auf einem Bildschirm mit 320 dpi Dichte (xhdpi) entspricht 1 dp 2 physischen Pixeln. Somit bleibt die physikalische Größe eines Elements auf dem Bildschirm gleich — etwa 1/160 Zoll. Laut Android Developers (2025) ist dp die einzige Maßeinheit, die für Layout-, Padding-, Margin- und View-Breiten-/Höhenangaben verwendet werden sollte.
Wenn Sie eine Schaltfläche mit einer Breite von 160 px festlegen, ist sie auf einem mdpi-Bildschirm 1 Zoll breit, auf einem xxxhdpi-Bildschirm (640 dpi) jedoch nur 0,25 Zoll. dp löst dieses Problem: 160 dp auf jedem Bildschirm entsprechen 1 Zoll. Android konvertiert dp während des Renderns automatisch über DisplayMetrics.density in px. Laut Android Developer Blog (2025) berechneten Entwickler vor der Einführung von dp (Android 1.0) manuell px-Offsets, was beim Portieren zu ständigen Fehlern führte.
dp, px und sp sind drei Maßeinheiten in Android, jede mit ihrem eigenen Zweck. px ist ein physisches Bildschirmpixel, das von der Dichte abhängt. dp ist ein dichteunabhängiges Pixel für Elementabmessungen. sp ist ein skalierungsunabhängiges Pixel für Text, das zusätzlich die Systemschriftgrößeneinstellungen berücksichtigt. Laut Material Design (2025) ist der Unterschied zwischen dp und sp ein wichtiger Barrierefreiheitspunkt: Benutzer mit Sehschwäche vergrößern die Schriftgröße, und sp-Werte passen sich automatisch an, dp jedoch nicht.
| Einheit | Vollständiger Name | Berücksichtigt Dichte | Berücksichtigt Schriftarteinstellungen | Verwendung |
|---|---|---|---|---|
| px | Pixel | Nein | Nein | Nicht empfohlen |
| dp | Dichteunabhängiges Pixel | Ja | Nein | Layout, Padding, Margins |
| sp | Skalierungsunabhängiges Pixel | Ja | Ja | Textgröße |
Die Umrechnungsformel von dp in px: px = dp × (dpi / 160). Für die umgekehrte Umrechnung: dp = px / (dpi / 160). density ist das Verhältnis dpi / 160, das Android basierend auf DisplayMetrics berechnet. Auf mdpi density = 1,0, auf hdpi = 1,5, auf xhdpi = 2,0, auf xxhdpi = 3,0, auf xxxhdpi = 4,0. Somit sind 48 dp in Pixeln: auf mdpi — 48 px, auf xxhdpi — 144 px. Laut Google I/O 2024 kann diese Formel zur ungefähren Umrechnung von iOS pt (Punkten) in dp verwendet werden — 1 pt ≈ 1 dp.
| Bucket | Dichte | dpi-Wert | 48 dp in px | 16 dp in px |
|---|---|---|---|---|
| mdpi | 1.0 | 160 | 48 | 16 |
| hdpi | 1.5 | 240 | 72 | 24 |
| xhdpi | 2.0 | 320 | 96 | 32 |
| xxhdpi | 3.0 | 480 | 144 | 48 |
| xxxhdpi | 4.0 | 640 | 192 | 64 |
dimens.xml ist eine Android-Ressourcendatei in res/values/, die zum Speichern aller Abmessungen in dp (und sp für Text) dient. Die Zentralisierung von Abmessungen in dimens.xml vereinfacht die Wartung: Eine Änderung eines Werts in dimens.xml aktualisiert die Größe auf allen Anwendungsbildschirmen. Sie können qualifizierte dimens.xml-Dateien für verschiedene Dichten erstellen (values-hdpi, values-xhdpi). Laut Android Jetpack Docs (2025) empfiehlt Google, Margen, Padding, Elementbreiten (Konstanten), Avatargrößen und die Symbolleistenhöhe in dimens.xml zu speichern.
<resources>
<dimen name="margin_small">8dp</dimen>
<dimen name="margin_medium">16dp</dimen>
<dimen name="margin_large">24dp</dimen>
<dimen name="avatar_size">48dp</dimen>
<dimen name="toolbar_height">56dp</dimen>
<dimen name="text_size_body">14sp</dimen>
<dimen name="icon_size_small">24dp</dimen>
</resources>
In dieser Datei hat jedes dimen einen Namen und einen Wert. Verwendung in XML-Markup: @dimen/avatar_size. Laut Material Design Guidelines (2025) beträgt der grundlegende Rasterschritt in Android 8 dp (8-Punkt-Raster). Alle Abstände, Elementgrößen und Entfernungen sollten ein Vielfaches von 8 dp sein: 8, 16, 24, 32, 48, 56, 64, 72 dp. Für Text beträgt der Schritt 4 sp.
In XML-Markup wird dp direkt verwendet: android:layout_width="48dp". In programmatischem Code (Kotlin/Java) müssen Sie dp mit TypedResource oder Erweiterungsfunktionen in px umwandeln. TypedResource bietet vorgefertigte Methoden für die Arbeit mit dp zur Laufzeit: getDimensionPixelSize() gibt einen ganzzahligen px-Wert zurück. In Jetpack Compose ist dp die Standardmaßeinheit in Modifikatoren und Layout-Containern.
// Programmatische Konvertierung von dp in px
fun Context.dpToPx(dp: Int): Int {
return (dp * resources
.displayMetrics
.density).toInt()
}
// Verwendung in Activity
val paddingPx = dpToPx(16)
button.setPadding(
paddingPx,
paddingPx,
paddingPx,
paddingPx,
)
// Jetpack Compose: dp als integrierte Einheit
Modifier
.padding(16.dp)
.size(48.dp)
In diesem Beispiel ist dpToPx() eine Erweiterungsfunktion für Context, die dp mit displayMetrics.density in px umwandelt. In Jetpack Compose ist dp in das Typsystem integriert und erfordert keine manuelle Konvertierung — der Compiler übersetzt dp automatisch in der Rendering-Phase in px.
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:padding="@dimen/margin_medium"
android:textSize="@dimen/text_size_body"
android:text="@string/button_label"
android:layout_marginTop="16dp"
/>
In XML wird dp als Suffix der Zahl angegeben — margin_top="16dp". Für Text wird sp verwendet — textSize="@dimen/text_size_body". Die @dimen-Referenz ermöglicht eine zentrale Wertverwaltung. Die Verwendung von match_parent für die Breite und 48dp für die Höhe ist ein Standard-Material-Design-Muster für Schaltflächen.
Laut einer Analyse von Android-Anwendungen aus der Google Play Console (2025) sind die fünf häufigsten Fehler: Verwendung von px anstelle von dp in XML-Markup, fehlende dimens.xml (Werte inline geschrieben), falsche Umrechnung von dp in px im Code (Verwendung der Ganzzahldivision), Ignorieren von sp für Text und Nichtberücksichtigung der Systemschriftgrößeneinstellungen über sp. Die Ganzzahldivision ist der gefährlichste Fehler: In Kotlin val px = dp * density — wenn dp und density Int sind, ist das Ergebnis auch Int, und die Genauigkeit geht verloren.
Häufig gestellte Fragen
dp in Android und pt (Punkte) in iOS sind äquivalente Maßeinheiten. 1 dp in Android entspricht ungefähr 1 pt in iOS. Beide Konzepte beschreiben dichteunabhängige Punkte: auf älteren Geräten mit niedriger Dichte 1 dp/pt = 1 px, auf modernen — 2-4 px. Der Unterschied liegt im Basiswert: Android verwendet 160 dpi als Basis-Dichte, iOS verwendet 163 dpi, was eine Fehlertoleranz von weniger als 2 % ergibt.
In Jetpack Compose ist keine Konvertierung erforderlich — dp ist in das Typsystem integriert. Alle Modifikatoren und Layouts akzeptieren Dp, nicht px. Wenn Sie px aus dp erhalten müssen, verwenden Sie density: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity bietet den Umrechnungsfaktor, der die Bildschirmdichte des Geräts berücksichtigt.
dp ist ein Android-Begriff. In iOS ist das Äquivalent pt (Punkte). Swift arbeitet automatisch mit Punkten, die von der Bildschirmdichte unabhängig sind. In UIKit und SwiftUI werden alle Abmessungen in Punkten angegeben, und das System konvertiert sie mit dem Skalierungsfaktor des Bildschirms (UIScreen.main.scale) in px. Gleiches Prinzip, anderer Name.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch