Vi förklarar essensen av Screen Density (Density Buckets) i Android — klassificeringen av skärmar efter pixeldensitet: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density avgör hur många fysiska pixlar som får plats på en tum av skärmen och påverkar direkt hur bilder och gränssnitt visas på olika enheter. Enligt Google Android Compatibility Definition (2025) stöder Android 6 primära Density Buckets och upp till 8 ytterligare för vikbara enheter.
Huvudpunkter
Screen Density (skärmdensitet) — antalet fysiska pixlar per tum skärm (ppi — pixels per inch, eller dpi — dots per inch). Android använder konceptet Density Buckets — grupper av skärmar med liknande densitet som samma skalningsfaktorer tillämpas på. Till skillnad från upplösning (antal pixlar i bredd och höjd) bestämmer densiteten den fysiska storleken på en pixel på skärmen. Enligt Google Pixel Team (2025) är densiteten för moderna flaggskepp 450-550 ppi, vilket motsvarar buckets xxhdpi-xxxhdpi.
Systemet med Density Buckets dök upp i Android 1.6 Donut (2009) med de första enheterna på 160 dpi (mdpi). I takt med att skärmupplösningen ökade lades nya buckets till: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Varje ny bucket återspeglade en 1.5- eller 2-faldig ökning av densiteten jämfört med den föregående. Enligt Android Open Source Project (2025) har för närvarande 96% av aktiva Android-enheter en densitet från hdpi till xxxhdpi.
Density Buckets — densitetsintervall definierade av Google för att gruppera Android-skärmar. Den grundläggande bucket — mdpi (160 dpi). Skalningsfaktorn (scale factor) visar hur många gånger resursen för en viss bucket är större än för mdpi. Till exempel innebär xhdpi (2×) att bilden måste vara 2 gånger bredare och högre än sin mdpi-version. Enligt Android Studio Resource Manager (2025) är xxhdpi den vanligaste bucket bland aktiva enheter (38% av marknaden), följt av xhdpi (28%).
| Bucket | DPI-intervall | Scale | Exempelenhet | Marknadsandel (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Gamla budgetenheter | Mindre än 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7″ surfplattor | 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% |
Skärmupplösning — det totala antalet pixlar i bredd och höjd (t.ex. 1080×2400). Skärmdensitet — antalet pixlar per tum. Två enheter med samma upplösning kan ha olika densitet om skärmens fysiska storlek skiljer sig. Till exempel har en 6-tums telefon med upplösningen 1080×2400 en densitet på cirka 440 dpi (xxhdpi), medan en 5-tums telefon med samma upplösning har cirka 530 dpi (xxxhdpi). Detta är den avgörande skillnaden: gränssnittet måste anpassa sig till densiteten, inte upplösningen, annars blir elementen för små på enheter med hög densitet.
Android använder qualifiers i namn på res-mappar för att ladda resurser för en specifik skärmdensitet: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. När appen startar väljer Android resurser från mappen som bäst matchar enhetens densitet. Om det inte finns någon exakt matchning tar systemet den närmaste bucket eller skalar resursen från en lägre densitet. Enligt Android Docs (2025) behövs inga densitetskvalificerare för vektorer (VectorDrawable) — de skalas automatiskt.
/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)
I denna struktur innehåller varje mapp samma ikon, men i olika fysisk storlek i pixlar. Grundstorleken 48×48 pixlar för mdpi multipliceras med skalningsfaktorn för varje bucket. Android väljer automatiskt den nödvändiga filen baserat på enhetens DisplayMetrics.density. För VectorDrawable (XML-format) räcker en fil i drawable/ — systemet skalar den utan kvalitetsförlust.
Storleksberäkning av bilden för varje densitet baseras på en enkel formel: storlek i mdpi × scale factor. Om ikonen i mdpi har storleken 48×48 px, blir den 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). Enligt Material Design Guidelines (2025) tillämpas denna formel för alla rasterresurser: ikoner, bakgrunder, bilder och 9-patch.
| Bucket | Scale | Storlek mdpi (px) | Storlek i bucket (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 |
Korrekt förberedelse av resurser för Density Buckets omfattar fem viktiga regler. För det första, använd VectorDrawable för enkla ikoner — detta eliminerar behovet av fem kopior. För det andra, för rasterbilder, exportera alla densiteter samtidigt från designverktyg (Android Studio Asset Studio genererar automatiskt). För det tredje, undvik att placera bilder i drawable/ utan kvalificerare — systemet kommer att skala med kvalitetsförlust. För det fjärde, testa på en enhet med annan densitet än din primära — emulatorn tillåter ändring av densitet. För det femte, använd WebP istället för PNG — enligt Google (2025) ger WebP 25-35% mindre storlek vid samma kvalitet.
Vanliga frågor
mdpi (medium-density pixel-independent) — den grundläggande Density Bucket i Android med en densitet på 160 dpi. Alla andra buckets beräknas i förhållande till mdpi: hdpi — 1.5×, xhdpi — 2× och så vidare. mdpi motsvarar en fysisk pixel per density-independent pixel (dp). Designers utgår från mdpi när de skapar layouter.
Använd DisplayMetrics: getResources().getDisplayMetrics().density returnerar skalningsfaktorn (1.0 för mdpi, 3.0 för xxhdpi). För programmeringsmässig bestämning av bucket, anropa getResources().getConfiguration().densityDpi. I Android Studio finns också Device Explorer som visar densityDpi för den anslutna enheten.
Tekniskt — ja, men med kvalitetsförlust. Om resursen bara finns i drawable-xxhdpi, kommer den på en mdpi-enhet att minskas 3 gånger — bilden blir suddig. Om resursen bara finns i mdpi, kommer den på xxhdpi att förstoras — pixelering uppstår. Rekommenderas att förbereda åtminstone för xhdpi, xxhdpi och xxxhdpi — detta täcker 84% av aktiva enheter (2025). För VectorDrawable räcker en fil utan kvalificerare.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också