dp — Grundlagen, dichteunabhängige Pixel in Android

Autor: IT Sectr Veröffentlicht: 2026-02-25 Lesezeit: 7 Min.

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) — eine abstrakte Maßeinheit in Android, die 1/160 Zoll auf dem Bildschirm entspricht.
  • Umrechnungsformel: px = dp × (dpi / 160). Auf mdpi-Bildschirmen 1 dp = 1 px, auf xxhdpi 1 dp = 3 px.
  • Alle Abmessungen in XML-Layouts (layout_width, padding, margin) werden in dp angegeben.
  • dimens.xml — Android-Ressourcendatei zur zentralen Speicherung von dp-Werten.
  • Laut Google Android Performance Guide (2025) beseitigt die Verwendung von dp anstelle von px 90 % der Probleme bei der Anpassung der Benutzeroberfläche auf verschiedenen Bildschirmen.

Was ist dp in Android?

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.

Warum px nicht verwendet werden sollten

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: worin besteht der Unterschied

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.

EinheitVollständiger NameBerücksichtigt DichteBerücksichtigt SchriftarteinstellungenVerwendung
pxPixelNeinNeinNicht empfohlen
dpDichteunabhängiges PixelJaNeinLayout, Padding, Margins
spSkalierungsunabhängiges PixelJaJaTextgröße

Formel zur Umrechnung von dp in px und umgekehrt

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.

BucketDichtedpi-Wert48 dp in px16 dp in px
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: zentrale Abmessungsverwaltung

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.

XML


<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.

Programmatische Verwendung von dp in Kotlin und XML

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.

Kotlin
// 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.

XML-Markup mit dp

XML

<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.

Häufige Fehler bei der Verwendung von dp

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.

  • px statt dp — die Anwendung sieht auf Geräten mit unterschiedlicher Dichte anders aus. Wird behoben, indem px in XML durch dp ersetzt wird.
  • Inline-Werte — Abmessungen werden direkt in Layout-Dateien geschrieben. Das Duplizieren von Werten erschwert die Wartung und Aktualisierung.
  • sp für Text — die Verwendung von dp für die Schriftgröße ignoriert Benutzereinstellungen und beeinträchtigt die Barrierefreiheit.
  • Ganzzahldivision — in Kotlin ergibt die Division von Int durch Int einen Int, wobei der Bruchteil verloren geht. Verwenden Sie immer Float.

Häufig gestellte Fragen

Wie unterscheidet sich dp von pt in iOS?

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.

Wie konvertiert man dp in Jetpack Compose in px?

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.

Muss ich dp in iOS verwenden?

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

  • dp — Dichteunabhängiges Pixel, eine abstrakte Einheit für UI-Abmessungen in Android, gleich 1/160 Zoll.
  • Formel: px = dp × (dpi / 160). Auf mdpi 1 dp = 1 px, auf xxhdpi 1 dp = 3 px.
  • Alle Abmessungen in XML-Markup sollten in dp angegeben werden, Textgröße in sp.
  • dimens.xml — zentrale Speicherung von Abmessungen. Eine Änderung aktualisiert die gesamte Benutzeroberfläche.
  • 8-Punkt-Raster: Alle Abmessungen sind Vielfache von 8 dp, Textabstände — 4 sp.
  • Verwenden Sie in programmatischem Code TypedResource oder Erweiterungsfunktionen für die Umrechnung von dp in px.

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.

Projekt besprechen

Lesen Sie auch