Vysvětlujeme podstatu Screen Density (Density Buckets) v Androidu — klasifikaci obrazovek podle hustoty pixelů: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density určuje, kolik fyzických pixelů se vejde na jeden palec obrazovky, a přímo ovlivňuje, jak se obrázky a rozhraní zobrazují na různých zařízeních. Podle Google Android Compatibility Definition (2025) Android podporuje 6 hlavních Density Buckets a až 8 dalších pro skládací zařízení.
Hlavní body
Screen Density (hustota obrazovky) — počet fyzických pixelů na palec obrazovky (ppi — pixels per inch, nebo dpi — dots per inch). Android používá koncept Density Buckets — skupiny obrazovek s podobnou hustotou, pro které se používají stejné faktory měřítka. Na rozdíl od rozlišení (počet pixelů na šířku a výšku) určuje hustota fyzickou velikost pixelu na obrazovce. Podle Google Pixel Team (2025) je hustota moderních vlajkových lodí 450-550 ppi, což odpovídá bucketům xxhdpi-xxxhdpi.
Systém Density Buckets se objevil v Android 1.6 Donut (2009) s prvními zařízeními na 160 dpi (mdpi). S růstem rozlišení obrazovek byly přidávány nové buckety: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Každý nový bucket odrážel 1.5násobné nebo dvojnásobné zvýšení hustoty oproti předchozímu. Podle Android Open Source Project (2025) má v současnosti 96% aktivních Android zařízení hustotu od hdpi do xxxhdpi.
Density Buckets — rozsahy hustoty definované Googlem pro seskupování Android obrazovek. Základní bucket — mdpi (160 dpi). Faktor měřítka (scale factor) ukazuje, kolikrát je zdroj pro daný bucket větší než pro mdpi. Například xhdpi (2×) znamená, že obrázek musí být 2krát širší a vyšší než jeho verze mdpi. Podle Android Studio Resource Manager (2025) je xxhdpi nejběžnějším bucketem mezi aktivními zařízeními (38% trhu), následovaný xhdpi (28%).
| Bucket | Rozsah DPI | Scale | Příklad zařízení | Podíl na trhu (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Stará levná zařízení | Méně než 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7″ tablety | 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% |
Rozlišení obrazovky — celkový počet pixelů na šířku a výšku (např. 1080×2400). Hustota obrazovky — počet pixelů na palec. Dvě zařízení se stejným rozlišením mohou mít různou hustotu, pokud se liší fyzické rozměry obrazovky. Například 6palcový telefon s rozlišením 1080×2400 má hustotu přibližně 440 dpi (xxhdpi), zatímco 5palcový se stejným rozlišením — přibližně 530 dpi (xxxhdpi). To je klíčový rozdíl: rozhraní se musí přizpůsobovat hustotě, nikoli rozlišení, jinak budou prvky na zařízeních s vysokou hustotou příliš malé.
Android používá qualifiers v názvech složek res pro načítání zdrojů pro konkrétní hustotu obrazovky: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Při spuštění aplikace Android vybírá zdroje ze složky, která nejlépe odpovídá hustotě zařízení. Pokud neexistuje přesná shoda, systém vezme nejbližší bucket nebo škáluje zdroj z nižší hustoty. Podle Android Docs (2025) pro vektory (VectorDrawable) nejsou kvalifikátory hustoty potřeba — škálují se automaticky.
/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)
V této struktuře každá složka obsahuje stejnou ikonu, ale v jiné fyzické velikosti v pixelech. Základní velikost 48×48 pixelů pro mdpi se násobí faktorem měřítka pro každý bucket. Android automaticky vybírá potřebný soubor na základě DisplayMetrics.density zařízení. Pro VectorDrawable (formát XML) stačí jeden soubor v drawable/ — systém ho škáluje bez ztráty kvality.
Výpočet velikosti obrázku pro každou hustotu je založen na jednoduchém vzorci: velikost v mdpi × scale factor. Pokud má ikona v mdpi velikost 48×48 px, pak pro hdpi bude 72×72 px (48 × 1.5), pro xhdpi — 96×96 px (48 × 2), pro xxhdpi — 144×144 px (48 × 3), pro xxxhdpi — 192×192 px (48 × 4). Podle Material Design Guidelines (2025) se tento vzorec vztahuje na všechny rastrové zdroje: ikony, pozadí, obrázky a 9-patch.
| Bucket | Scale | Velikost mdpi (px) | Velikost v bucketu (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 |
Správná příprava zdrojů pro Density Buckets zahrnuje pět klíčových pravidel. Za prvé, používejte VectorDrawable pro jednoduché ikony — to eliminuje potřebu pěti kopií. Za druhé, pro rastrové obrázky exportujte všechny hustoty najednou z návrhových nástrojů (Android Studio Asset Studio generuje automaticky). Za třetí, vyhněte se umísťování obrázků do drawable/ bez kvalifikátoru — systém bude škálovat se ztrátou kvality. Za čtvrté, testujte na zařízení s jinou hustotou, než je vaše hlavní — emulátor umožňuje změnu hustoty. Za páté, používejte WebP místo PNG — podle Google (2025) nabízí WebP o 25-35% menší velikost při stejné kvalitě.
Často kladené otázky
mdpi (medium-density pixel-independent) — základní Density Bucket Androidu s hustotou 160 dpi. Všechny ostatní buckety se počítají vůči mdpi: hdpi — 1.5×, xhdpi — 2× a tak dále. mdpi odpovídá jednomu fyzickému pixelu na jeden density-independent pixel (dp). Designéři se při vytváření návrhů řídí právě mdpi.
Použijte DisplayMetrics: getResources().getDisplayMetrics().density vrací faktor měřítka (1.0 pro mdpi, 3.0 pro xxhdpi). Pro programové určení bucketu zavolejte getResources().getConfiguration().densityDpi. V Android Studio je také Device Explorer, který zobrazuje densityDpi pro připojené zařízení.
Technicky — ano, ale se ztrátou kvality. Pokud zdroj existuje pouze v drawable-xxhdpi, na zařízení mdpi bude 3krát zmenšen — obrázek se rozmaže. Pokud je zdroj pouze v mdpi, na xxhdpi bude zvětšen — dojde k pixelaci. Doporučuje se připravit alespoň pro xhdpi, xxhdpi a xxxhdpi — to pokrývá 84% aktivních zařízení (2025). Pro VectorDrawable stačí jeden soubor bez kvalifikátoru.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také