Wir erklären das Wesen von Screen Density (Density Buckets) in Android — die Klassifizierung von Bildschirmen nach Pixeldichte: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density bestimmt, wie viele physische Pixel in einen Zoll Bildschirm passen, und beeinflusst direkt, wie Bilder und Oberflächen auf verschiedenen Geräten dargestellt werden. Laut Google Android Compatibility Definition (2025) unterstützt Android 6 Haupt-Density-Buckets und bis zu 8 zusätzliche für faltbare Geräte.
Wichtige Erkenntnisse
Screen Density ist die Anzahl physischer Pixel pro Zoll Bildschirm (ppi — Pixel pro Zoll, oder dpi — Punkte pro Zoll). Android verwendet das Konzept der Density Buckets — Gruppen von Bildschirmen mit ähnlicher Dichte, die dieselben Skalierungsfaktoren verwenden. Im Gegensatz zur Auflösung (Anzahl der Pixel in Breite und Höhe) bestimmt die Dichte die physische Größe eines Pixels auf dem Bildschirm. Laut Google Pixel Team (2025) beträgt die Dichte moderner Flaggschiffe 450-550 ppi, was dem Bucket xxhdpi-xxxhdpi entspricht.
Das Density-Bucket-System erschien in Android 1.6 Donut (2009) mit den ersten Geräten mit 160 dpi (mdpi). Mit steigenden Bildschirmauflösungen wurden neue Buckets hinzugefügt: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Jeder neue Bucket spiegelte eine 1.5× oder 2× Zunahme der Dichte gegenüber dem vorherigen wider. Laut Android Open Source Project (2025) haben jetzt 96% der aktiven Android-Geräte Dichten im Bereich von hdpi bis xxxhdpi.
Density Buckets sind von Google definierte Dichtebereiche zur Gruppierung von Android-Bildschirmen. Der Basis-Bucket ist mdpi (160 dpi). Der Skalierungsfaktor zeigt, wie viel größer eine Ressource für einen bestimmten Bucket im Vergleich zu mdpi ist. Beispielsweise bedeutet xhdpi (2×), dass das Bild in Breite und Höhe 2-mal größer sein muss als seine mdpi-Version. Laut Android Studio Resource Manager (2025) ist xxhdpi der häufigste Bucket unter aktiven Geräten (38% Marktanteil), gefolgt von xhdpi (28%).
| Bucket | DPI-Bereich | Skalierung | Gerätebeispiel | Marktanteil (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Alte Budget-Geräte | Weniger als 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7"-Tablets | 3% |
| hdpi | 160-240 dpi | 1.5× | Samsung Galaxy S2, Nexus 4 | 12% |
| xhdpi | 240-320 dpi | 2× | Google Nexus 5, Moto G | 28% |
| xxhdpi | 320-480 dpi | 3× | Samsung Galaxy S8, Pixel 3 | 38% |
| xxxhdpi | 480-640 dpi | 4× | Samsung Galaxy S24 Ultra, Pixel 9 Pro | 18% |
Bildschirmauflösung ist die Gesamtzahl der Pixel in Breite und Höhe (z. B. 1080×2400). Bildschirmdichte ist die Anzahl der Pixel pro Zoll. Zwei Geräte mit derselben Auflösung können unterschiedliche Dichten haben, wenn sich ihre physischen Bildschirmgrößen unterscheiden. Beispielsweise hat ein 6-Zoll-Telefon mit einer Auflösung von 1080×2400 eine Dichte von etwa 440 dpi (xxhdpi), während ein 5-Zoll-Telefon mit derselben Auflösung etwa 530 dpi (xxxhdpi) hat. Dies ist ein entscheidender Unterschied: Die Oberfläche sollte sich nicht an die Auflösung, sondern an die Dichte anpassen, sonst sind Elemente auf Geräten mit hoher Dichte zu klein.
Android verwendet Qualifier in den res-Ordnernamen, um Ressourcen für eine bestimmte Bildschirmdichte zu laden: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Beim Start der Anwendung wählt Android Ressourcen aus dem Ordner aus, der am besten zur Gerätedichte passt. Bei keiner genauen Übereinstimmung verwendet das System den nächstgelegenen Bucket oder skaliert eine Ressource aus einer niedrigeren Dichte. Laut Android Docs (2025) werden für Vektorgrafiken (VectorDrawable) keine Dichte-Qualifier benötigt — sie werden automatisch skaliert.
/res/
drawable-mdpi/
icon_app.png (48x48 px)
drawable-hdpi/
icon_app.png (72x72 px)
drawable-xhdpi/
icon_app.png (96x96 px)
drawable-xxhdpi/
icon_app.png (144x144 px)
drawable-xxxhdpi/
icon_app.png (192x192 px)
In dieser Struktur enthält jeder Ordner dasselbe Symbol, jedoch in einer anderen physischen Pixelgröße. Die Basisgröße von 48×48 Pixeln für mdpi wird mit dem Skalierungsfaktor für jeden Bucket multipliziert. Android wählt automatisch die richtige Datei basierend auf DisplayMetrics.density des Geräts aus. Für VectorDrawable (XML-Format) reicht eine einzelne Datei in drawable/ — das System skaliert sie ohne Qualitätsverlust.
Die Größenberechnung eines Bildes für jede Dichte basiert auf einer einfachen Formel: Größe in mdpi × Skalierungsfaktor. Wenn ein Symbol in mdpi 48×48 px groß ist, dann ist es für hdpi 72×72 px (48 × 1.5), für xhdpi — 96×96 px (48 × 2), für xxhdpi — 144×144 px (48 × 3), für xxxhdpi — 192×192 px (48 × 4). Laut Material Design Guidelines (2025) gilt diese Formel für alle Raster-Ressourcen: Symbole, Hintergründe, Bilder und 9-patch.
| Bucket | Skalierung | mdpi-Größe (px) | Bucket-Größe (px) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 48×48 |
| hdpi | 1.5× | 48×48 | 72×72 |
| xhdpi | 2× | 48×48 | 96×96 |
| xxhdpi | 3× | 48×48 | 144×144 |
| xxxhdpi | 4× | 48×48 | 192×192 |
Die richtige Vorbereitung von Ressourcen für Density Buckets umfasst fünf Schlüsselregeln. Erstens: Verwenden Sie VectorDrawable für einfache Symbole — dies macht fünf Kopien überflüssig. Zweitens: Exportieren Sie für Rasterbilder alle Dichten aus den Design-Tools (Android Studio Asset Studio generiert sie automatisch). Drittens: Vermeiden Sie es, Bilder ohne Qualifier in drawable/ zu platzieren — das System skaliert sie mit Qualitätsverlust. Viertens: Testen Sie auf einem Gerät mit einer anderen Dichte als Ihrem Hauptgerät — der Emulator erlaubt das Ändern der Dichte. Fünftens: Verwenden Sie WebP statt PNG — laut Google (2025) bietet WebP eine 25-35% kleinere Größe bei gleicher Qualität.
Häufig gestellte Fragen
mdpi (medium-density pixel-independent) — der Basis-Density-Bucket in Android mit einer Dichte von 160 dpi. Alle anderen Buckets werden relativ zu mdpi berechnet: hdpi — 1.5×, xhdpi — 2× und so weiter. mdpi entspricht einem physischen Pixel pro dichteunabhängigem Pixel (dp). Designer verwenden mdpi als Referenz beim Erstellen von Layouts.
Verwenden Sie DisplayMetrics: getResources().getDisplayMetrics().density gibt den Skalierungsfaktor zurück (1.0 für mdpi, 3.0 für xxhdpi). Zur programmatischen Bestimmung des Buckets rufen Sie getResources().getConfiguration().densityDpi auf. Android Studio hat auch einen Device Explorer, der densityDpi für verbundene Geräte anzeigt.
Technisch gesehen — ja, aber mit Qualitätsverlust. Wenn eine Ressource nur in drawable-xxhdpi vorhanden ist, wird sie auf einem mdpi-Gerät um das 3-fache verkleinert — das Bild wird unscharf. Wenn die Ressource nur in mdpi vorhanden ist, wird sie auf xxhdpi vergrößert — Pixelbildung. Empfohlen wird die Vorbereitung mindestens für xhdpi, xxhdpi und xxxhdpi — das deckt 84% der aktiven Geräte (2025) ab. Für VectorDrawable reicht eine einzelne Datei ohne Qualifier aus.
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