Elmagyarázzuk a Screen Density (Density Buckets) lényegét Androidban — a képernyők pixelsűrűség szerinti osztályozását: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. A Screen Density meghatározza, hogy hány fizikai pixel fér el egy hüvelyknyi képernyőn, és közvetlenül befolyásolja, hogy a képek és a felület hogyan jelennek meg a különböző eszközökön. A Google Android Compatibility Definition (2025) szerint az Android 6 fő Density Buckets-et és további 8-at támogat a hajlítható eszközökhöz.
Főbb pontok
Screen Density (képernyősűrűség) — a fizikai képpontok száma egy hüvelyknyi képernyőn (ppi — pixels per inch, vagy dpi — dots per inch). Az Android a Density Buckets koncepcióját használja — hasonló sűrűségű képernyők csoportjait, amelyekre ugyanazok a skálázási tényezők vonatkoznak. A felbontástól (a képpontok száma szélességben és magasságban) eltérően a sűrűség határozza meg a képpont fizikai méretét a képernyőn. A Google Pixel Team (2025) szerint a modern zászlóshajók sűrűsége 450-550 ppi, ami az xxhdpi-xxxhdpi bucket-eknek felel meg.
A Density Buckets rendszer az Android 1.6 Donut (2009) verzióval jelent meg az első 160 dpi (mdpi) sűrűségű eszközökkel. A képernyőfelbontás növekedésével új bucket-ek kerültek hozzáadásra: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Minden új bucket 1.5-szeres vagy kétszeres sűrűségnövekedést tükrözött az előzőhöz képest. Az Android Open Source Project (2025) szerint jelenleg az aktív Android-eszközök 96%-ának sűrűsége hdpi és xxxhdpi között van.
Density Buckets — a Google által az Android-képernyők csoportosítására meghatározott sűrűségtartományok. Az alap bucket — mdpi (160 dpi). A skálázási tényező (scale factor) megmutatja, hogy egy adott bucket erőforrása hányszor nagyobb az mdpi-nél. Például az xhdpi (2×) azt jelenti, hogy a képnek 2-szer szélesebbnek és magasabbnak kell lennie, mint az mdpi verziója. Az Android Studio Resource Manager (2025) szerint az xxhdpi a leggyakoribb bucket az aktív eszközök között (38% piaci részesedés), ezt követi az xhdpi (28%).
| Bucket | DPI tartomány | Scale | Példa eszköz | Piaci részesedés (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Régi budget eszközök | Kevesebb mint 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7″ táblagépek | 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% |
Képernyőfelbontás — a képpontok teljes száma szélességben és magasságban (pl. 1080×2400). Képernyősűrűség — a képpontok száma hüvelykenként. Két azonos felbontású eszköz eltérő sűrűséggel rendelkezhet, ha a képernyő fizikai mérete eltérő. Például egy 6 hüvelykes telefon 1080×2400 felbontással körülbelül 440 dpi (xxhdpi) sűrűségű, míg egy 5 hüvelykes ugyanazzal a felbontással körülbelül 530 dpi (xxxhdpi) sűrűségű. Ez a kulcsfontosságú különbség: a felületnek a sűrűséghez kell igazodnia, nem a felbontáshoz, különben az elemek túl kicsik lesznek a nagy sűrűségű eszközökön.
Az Android qualifiers használ a res mappák neveiben az adott képernyősűrűséghez tartozó erőforrások betöltéséhez: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Az alkalmazás indításakor az Android a készülék sűrűségéhez legjobban illő mappából választja ki az erőforrásokat. Ha nincs pontos egyezés, a rendszer a legközelebbi bucket-et veszi, vagy alacsonyabb sűrűségről skálázza az erőforrást. Az Android Docs (2025) szerint a vektorokhoz (VectorDrawable) nincs szükség sűrűségi kvalifikátorokra — automatikusan skálázódnak.
/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)
Ebben a struktúrában minden mappa ugyanazt az ikont tartalmazza, de eltérő fizikai méretben képpontokban. Az mdpi alapmérete 48×48 pixel, amely minden bucket esetében megszorzódik a skálázási tényezővel. Az Android automatikusan kiválasztja a szükséges fájlt az eszköz DisplayMetrics.density értéke alapján. A VectorDrawable (XML formátum) esetében elegendő egy fájl a drawable/ mappában — a rendszer minőségveszteség nélkül skálázza.
Méretszámítás minden sűrűséghez egy egyszerű képleten alapul: méret mdpi-ben × scale factor. Ha az ikon mdpi-ben 48×48 px méretű, akkor hdpi esetén 72×72 px (48 × 1.5), xhdpi esetén 96×96 px (48 × 2), xxhdpi esetén 144×144 px (48 × 3), xxxhdpi esetén 192×192 px (48 × 4) lesz. A Material Design Guidelines (2025) szerint ez a képlet minden raszter erőforrásra vonatkozik: ikonokra, háttérképekre, képekre és 9-patch-re.
| Bucket | Scale | Mdpi méret (px) | Méret bucket-ben (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 |
Helyes előkészítés a Density Buckets-hez öt kulcsfontosságú szabályt foglal magában. Először is, használjon VectorDrawable-t egyszerű ikonokhoz — ez megszünteti az öt másolat szükségességét. Másodszor, raszteres képek esetén exportálja az összes sűrűséget egyszerre a tervezőeszközökből (az Android Studio Asset Studio automatikusan generálja). Harmadszor, kerülje a képek elhelyezését a drawable/ mappában kvalifikátor nélkül — a rendszer minőségvesztéssel skálázza. Negyedszer, teszteljen a sajátjától eltérő sűrűségű eszközön — az emulátor lehetővé teszi a sűrűség módosítását. Ötödször, használjon WebP-t PNG helyett — a Google (2025) szerint a WebP 25-35%-kal kisebb méretet biztosít azonos minőség mellett.
Gyakran Ismételt Kérdések
mdpi (medium-density pixel-independent) — az Android alap Density Bucket-je 160 dpi sűrűséggel. Az összes többi bucket az mdpi-hez viszonyítva számítódik: hdpi — 1.5×, xhdpi — 2× és így tovább. Az mdpi egy fizikai képpontnak felel meg density-independent pixelenként (dp). A tervezők az mdpi-hez igazodnak a layoutok létrehozásakor.
Használja a DisplayMetrics-et: a getResources().getDisplayMetrics().density visszaadja a skálázási tényezőt (1.0 mdpi-hez, 3.0 xxhdpi-hez). A bucket programozott meghatározásához hívja a getResources().getConfiguration().densityDpi-t. Az Android Studio-ban Device Explorer is található, amely megjeleníti a csatlakoztatott eszköz densityDpi értékét.
Technikailag — igen, de minőségveszteséggel. Ha az erőforrás csak drawable-xxhdpi-ben létezik, mdpi eszközön 3-szor kisebbre csökken — a kép elmosódottá válik. Ha az erőforrás csak mdpi-ben van, xxhdpi-n felnagyításra kerül — pixelesedés jelenik meg. Javasolt legalább xhdpi, xxhdpi és xxxhdpi esetén előkészíteni — ez az aktív eszközök 84%-át lefedi (2025). A VectorDrawable esetében elegendő egyetlen fájl kvalifikátor nélkül.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is