Screen Density: esența, densitatea pixelilor în Android

Autor: IT Sectr Publicat: 2026-02-25 Timp de citire: 6 min

Explicăm esența Screen Density (Density Buckets) în Android — clasificarea ecranelor după densitatea pixelilor: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density determină câți pixeli fizici încap într-un țol de ecran și influențează direct modul în care imaginile și interfața sunt afișate pe diferite dispozitive. Conform Google Android Compatibility Definition (2025), Android suportă 6 Density Buckets principale și până la 8 suplimentare pentru dispozitive pliabile.

Principalele

  • Screen Density — numărul de pixeli fizici pe țol (PPI). Android grupează ecranele în Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi.
  • Bucketul de bază — mdpi (160 dpi). Toate celelalte se calculează relativ la acesta: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×.
  • Resursele pentru diferite densități sunt stocate în foldere calificate res/drawable-{density}.
  • Conform Android Studio (2025), cea mai răspândită densitate pe dispozitivele moderne este xxhdpi (420+ dpi, 3×).
  • Screen Density nu depinde de rezoluția ecranului — două dispozitive cu aceeași rezoluție pot avea densități diferite.

Ce este Screen Density?

Screen Density (densitatea ecranului) — este numărul de pixeli fizici pe un țol de ecran (ppi — pixels per inch, sau dpi — dots per inch). Android utilizează conceptul de Density Buckets — grupuri de ecrane cu densitate similară, pentru care se aplică aceiași factori de scalare. Spre deosebire de rezoluție (numărul de pixeli pe lățime și înălțime), densitatea determină dimensiunea fizică a pixelului pe ecran. Conform Google Pixel Team (2025), densitatea flagship-urilor moderne este de 450-550 ppi, ceea ce corespunde bucketelor xxhdpi-xxxhdpi.

Istoria și evoluția Density Buckets

Sistemul Density Buckets a apărut în Android 1.6 Donut (2009) cu primele dispozitive la 160 dpi (mdpi). Odată cu creșterea rezoluției ecranelor, au fost adăugate bucketuri noi: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Fiecare bucket nou reflecta o creștere de 1.5 ori sau dublă a densității față de precedentul. Conform Android Open Source Project (2025), în prezent 96% dintre dispozitivele Android active au densitatea de la hdpi la xxxhdpi.

Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi

Density Buckets — sunt intervalele de densitate definite de Google pentru gruparea ecranelor Android. Bucketul de bază — mdpi (160 dpi). Factorul de scară (scale factor) arată de câte ori resursa pentru un anumit bucket este mai mare decât pentru mdpi. De exemplu, xhdpi (2×) înseamnă că imaginea trebuie să fie de 2 ori mai mare în lățime și înălțime decât versiunea mdpi. Conform Android Studio Resource Manager (2025), xxhdpi este cel mai răspândit bucket printre dispozitivele active (38% din piață), urmat de xhdpi (28%).

BucketInterval DPIScaleDispozitiv exempluCota de piață (2025)
ldpi120 dpi0.75×Dispozitive vechi bugetareSub 1%
mdpi120-160 dpiHTC Dream (G1), tablete 7″3%
hdpi160-240 dpi1.5×Samsung Galaxy S2, Nexus 412%
xhdpi240-320 dpiGoogle Nexus 5, Moto G28%
xxhdpi320-480 dpiSamsung Galaxy S8, Pixel 338%
xxxhdpi480-640 dpiSamsung Galaxy S24 Ultra, Pixel 9 Pro18%

Densitatea pixelilor vs rezoluția ecranului: care este diferența

Rezoluția ecranului — este numărul total de pixeli pe lățime și înălțime (de exemplu, 1080×2400). Densitatea ecranului — numărul de pixeli pe țol. Două dispozitive cu aceeași rezoluție pot avea densități diferite dacă dimensiunile fizice ale ecranului diferă. De exemplu, un telefon de 6 țoli cu rezoluția 1080×2400 are o densitate de aproximativ 440 dpi (xxhdpi), iar unul de 5 țoli cu aceeași rezoluție — aproximativ 530 dpi (xxxhdpi). Aceasta este diferența cheie: interfața trebuie să se adapteze nu la rezoluție, ci la densitate, altfel elementele vor fi prea mici pe dispozitivele cu densitate mare.

Calificatorii de resurse pentru densitate în Android

Android utilizează qualifiers în numele folderelor res pentru încărcarea resurselor pentru o densitate specifică a ecranului: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. La pornirea aplicației, Android selectează resursele din folderul care se potrivește cel mai bine cu densitatea dispozitivului. Dacă nu există o potrivire exactă, sistemul ia cel mai apropiat bucket sau scalează resursa dintr-o densitate mai mică. Conform Android Docs (2025), pentru vectori (VectorDrawable) calificatorii de densitate nu sunt necesari — se scalează automat.

XML

/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)

În această structură, fiecare folder conține aceeași pictogramă, dar într-o dimensiune fizică diferită în pixeli. Dimensiunea de bază de 48×48 pixeli pentru mdpi se înmulțește cu factorul de scară pentru fiecare bucket. Android selectează automat fișierul necesar pe baza DisplayMetrics.density a dispozitivului. Pentru VectorDrawable (format XML) este suficient un singur fișier în drawable/ — sistemul îl scalează fără pierdere de calitate.

Calculul pixelilor pentru fiecare densitate

Calculul dimensiunii imaginii pentru fiecare densitate se bazează pe o formulă simplă: dimensiunea în mdpi × scale factor. Dacă pictograma în mdpi are dimensiunea 48×48 px, atunci pentru hdpi va fi 72×72 px (48 × 1.5), pentru xhdpi — 96×96 px (48 × 2), pentru xxhdpi — 144×144 px (48 × 3), pentru xxxhdpi — 192×192 px (48 × 4). Conform Material Design Guidelines (2025), această formulă se aplică pentru toate resursele raster: pictograme, fundaluri, imagini și 9-patch.

BucketScaleDimensiune mdpi (px)Dimensiune în bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

Cele mai bune practici pentru pregătirea resurselor pentru toate densitățile

Pregătirea corectă a resurselor pentru Density Buckets include cinci reguli cheie. În primul rând, utilizați VectorDrawable pentru pictograme simple — aceasta elimină necesitatea a cinci copii. În al doilea rând, pentru imaginile raster, exportați toate densitățile simultan din instrumentele de design (Android Studio Asset Studio le generează automat). În al treilea rând, evitați plasarea imaginilor în drawable/ fără calificator — sistemul va scala cu pierdere de calitate. În al patrulea rând, testați pe un dispozitiv cu densitate diferită de cea principală — emulatorul permite schimbarea densității. În al cincilea rând, utilizați WebP în loc de PNG — conform Google (2025), WebP oferă o dimensiune cu 25-35% mai mică la aceeași calitate.

  • VectorDrawable — formatul preferat pentru pictograme și ilustrații simple. Un fișier XML înlocuiește 5 PNG-uri.
  • Android Studio Asset Studio — generarea automată a resurselor pentru toate densitățile din SVG sau PNG.
  • WebP cu lossless — formatul optim pentru fotografii. Dimensiune cu 30% mai mică decât PNG fără pierdere de calitate.
  • 9-patch — pentru fundaluri scalabile. Un singur fișier funcționează la toate densitățile cu setarea corectă a zonelor de întindere.
  • Adaptive Icons — formatul pictogramelor pentru API 26+. Permite setarea foreground și background separat pentru diferite densități.

Întrebări frecvente

Ce înseamnă mdpi în Android?

mdpi (medium-density pixel-independent) — este Density Bucketul de bază Android cu densitatea de 160 dpi. Toate celelalte bucketuri se calculează relativ la mdpi: hdpi — 1.5×, xhdpi — 2× și așa mai departe. mdpi corespunde unui pixel fizic per density-independent pixel (dp). Designerii se orientează exact după mdpi atunci când creează machete.

Cum aflu densitatea ecranului unui dispozitiv Android?

Utilizați DisplayMetrics: getResources().getDisplayMetrics().density returnează factorul de scară (1.0 pentru mdpi, 3.0 pentru xxhdpi). Pentru determinarea programatică a bucketului, apelați getResources().getConfiguration().densityDpi. În Android Studio există și Device Explorer, care arată densityDpi pentru dispozitivul conectat.

Pot să nu pregătesc resurse pentru toate densitățile?

Tehnic — da, dar cu pierdere de calitate. Dacă resursa există doar în drawable-xxhdpi, pe un dispozitiv mdpi va fi micșorată de 3 ori — imaginea va deveni neclară. Dacă resursa este doar în mdpi, pe xxhdpi va fi mărită — va apărea pixelizarea. Se recomandă pregătirea cel puțin pentru xhdpi, xxhdpi și xxxhdpi — acoperă 84% din dispozitivele active (2025). Pentru VectorDrawable este suficient un singur fișier fără calificator.

Rezumat

  • Screen Density — numărul de pixeli fizici pe țol (dpi/ppi). Android grupează ecranele în Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×).
  • Bucketul de bază mdpi = 160 dpi. Toate celelalte se calculează ca mdpi × scale factor.
  • Resursele pentru diferite densități sunt stocate în foldere calificate res/drawable-{bucket}.
  • xxhdpi — cel mai răspândit bucket (38%), urmat de xhdpi (28%) și xxxhdpi (18%).
  • VectorDrawable înlocuiește 5 fișiere raster și se scalează fără pierdere de calitate.
  • Utilizați WebP în loc de PNG pentru a economisi 30% din trafic și spațiu.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și