Screen Density: същност, плътност на пикселите в Android

Автор: IT Sectr Публикувано: 2026-02-25 Време за четене: 6 мин

Обясняваме същността на Screen Density (Density Buckets) в Android — класификация на екраните по плътност на пикселите: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density определя колко физически пиксела се побират в един инч от екрана и пряко влияе на това как изображенията и интерфейсът се показват на различни устройства. Според Google Android Compatibility Definition (2025), Android поддържа 6 основни Density Buckets и до 8 допълнителни за сгъваеми устройства.

Основни точки

  • Screen Density — брой физически пиксели на инч (PPI). Android групира екраните в Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi.
  • Базовият bucket — mdpi (160 dpi). Всички останали се изчисляват спрямо него: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×.
  • Ресурсите за различни плътности се съхраняват в квалифицирани папки res/drawable-{density}.
  • Според Android Studio (2025), най-разпространената плътност на съвременните устройства е xxhdpi (420+ dpi, 3×).
  • Screen Density не зависи от разделителната способност на екрана — две устройства с еднаква резолюция могат да имат различна плътност.

Какво е Screen Density?

Screen Density (плътност на екрана) — брой физически пиксели на инч екран (ppi — pixels per inch, или dpi — dots per inch). Android използва концепцията Density Buckets — групи екрани с подобна плътност, за които се прилагат едни и същи коефициенти на мащабиране. За разлика от резолюцията (брой пиксели по ширина и височина), плътността определя физическия размер на пиксела на екрана. Според Google Pixel Team (2025), плътността на съвременните флагмани е 450-550 ppi, което отговаря на buckets xxhdpi-xxxhdpi.

История и еволюция на Density Buckets

Системата Density Buckets се появи в Android 1.6 Donut (2009) с първите устройства на 160 dpi (mdpi). С нарастването на разделителната способност на екраните бяха добавени нови buckets: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Всеки нов bucket отразяваше 1.5-кратно или двойно увеличение на плътността спрямо предходния. Според Android Open Source Project (2025), в момента 96% от активните Android устройства имат плътност от hdpi до xxxhdpi.

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

Density Buckets — диапазони на плътност, определени от Google за групиране на Android екрани. Базовият bucket — mdpi (160 dpi). Коефициентът на мащабиране (scale factor) показва колко пъти ресурсът за даден bucket е по-голям от mdpi. Например xhdpi (2×) означава, че изображението трябва да бъде 2 пъти по-широко и по-високо от mdpi версията си. Според Android Studio Resource Manager (2025), xxhdpi е най-разпространеният bucket сред активните устройства (38% от пазара), следван от xhdpi (28%).

BucketDPI диапазонScaleПримерно устройствоПазарен дял (2025)
ldpi120 dpi0.75×Стари бюджетни устройстваПо-малко от 1%
mdpi120-160 dpiHTC Dream (G1), 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%

Плътност на пикселите спрямо разделителна способност: каква е разликата

Разделителна способност на екрана — общият брой пиксели по ширина и височина (напр. 1080×2400). Плътност на екрана — брой пиксели на инч. Две устройства с еднаква резолюция могат да имат различна плътност, ако физическите размери на екрана се различават. Например 6-инчов телефон с резолюция 1080×2400 има плътност около 440 dpi (xxhdpi), а 5-инчов със същата резолюция — около 530 dpi (xxxhdpi). Това е ключовата разлика: интерфейсът трябва да се адаптира към плътността, а не към резолюцията, в противен случай елементите ще бъдат твърде малки на устройства с висока плътност.

Квалификатори на ресурси за плътност в Android

Android използва qualifiers в имената на res папки за зареждане на ресурси за конкретна плътност на екрана: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. При стартиране на приложението Android избира ресурси от папката, която най-добре отговаря на плътността на устройството. Ако няма точно съвпадение, системата взема най-близкия bucket или мащабира ресурс от по-ниска плътност. Според Android Docs (2025), за вектори (VectorDrawable) не са необходими квалификатори за плътност — те се мащабират автоматично.

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)

В тази структура всяка папка съдържа същата икона, но в различен физически размер в пиксели. Базовият размер 48×48 пиксела за mdpi се умножава по scale factor за всеки bucket. Android автоматично избира необходимия файл въз основа на DisplayMetrics.density на устройството. За VectorDrawable (XML формат) е достатъчен един файл в drawable/ — системата го мащабира без загуба на качество.

Изчисляване на пиксели за всяка плътност

Изчисляване на размера на изображението за всяка плътност се основава на проста формула: размер в mdpi × scale factor. Ако иконата в mdpi е с размер 48×48 px, то за hdpi ще бъде 72×72 px (48 × 1.5), за xhdpi — 96×96 px (48 × 2), за xxhdpi — 144×144 px (48 × 3), за xxxhdpi — 192×192 px (48 × 4). Според Material Design Guidelines (2025), тази формула се прилага за всички растерни ресурси: икони, фонове, изображения и 9-patch.

BucketScaleРазмер mdpi (px)Размер в bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

Най-добри практики за подготовка на ресурси за всички плътности

Правилната подготовка на ресурси за Density Buckets включва пет ключови правила. Първо, използвайте VectorDrawable за прости икони — това елиминира необходимостта от пет копия. Второ, за растерни изображения експортирайте всички плътности наведнъж от инструментите за дизайн (Android Studio Asset Studio генерира автоматично). Трето, избягвайте поставянето на изображения в drawable/ без квалификатор — системата ще мащабира със загуба на качество. Четвърто, тествайте на устройство с плътност, различна от основната ви — емулаторът позволява промяна на плътността. Пето, използвайте WebP вместо PNG — според Google (2025), WebP дава 25-35% по-малък размер при същото качество.

  • VectorDrawable — предпочитан формат за икони и прости илюстрации. Един XML файл замества 5 PNG.
  • Android Studio Asset Studio — автоматично генериране на ресурси за всички плътности от SVG или PNG.
  • WebP с lossless — оптимален формат за снимки. 30% по-малък от PNG без загуба на качество.
  • 9-patch — за мащабируеми фонове. Един файл работи на всички плътности при правилно настройване на зоните на разтягане.
  • Adaptive Icons — формат на икони за API 26+. Позволява отделно настройване на foreground и background за различни плътности.

Често задавани въпроси

Какво означава mdpi в Android?

mdpi (medium-density pixel-independent) — основният Density Bucket на Android с плътност 160 dpi. Всички останали buckets се изчисляват спрямо mdpi: hdpi — 1.5×, xhdpi — 2× и така нататък. mdpi съответства на един физически пиксел на един density-independent pixel (dp). Дизайнерите се ориентират точно към mdpi при създаване на макети.

Как да разбера плътността на екрана на Android устройство?

Използвайте DisplayMetrics: getResources().getDisplayMetrics().density връща scale factor (1.0 за mdpi, 3.0 за xxhdpi). За програмно определяне на bucket извикайте getResources().getConfiguration().densityDpi. В Android Studio също има Device Explorer, който показва densityDpi за свързаното устройство.

Задължително ли е да подготвям ресурси за всички плътности?

Технически — да, но със загуба на качество. Ако ресурс съществува само в drawable-xxhdpi, на mdpi устройство ще бъде намален 3 пъти — изображението ще стане размазано. Ако ресурсът е само в mdpi, на xxhdpi ще бъде увеличен — ще се появи пикселизация. Препоръчва се подготовка поне за xhdpi, xxhdpi и xxxhdpi — това покрива 84% от активните устройства (2025). За VectorDrawable е достатъчен един файл без квалификатор.

Резюме

  • Screen Density — брой физически пиксели на инч (dpi/ppi). Android групира екраните в Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×).
  • Базовият bucket mdpi = 160 dpi. Останалите се изчисляват като mdpi × scale factor.
  • Ресурсите за различни плътности се съхраняват в квалифицирани папки res/drawable-{bucket}.
  • xxhdpi — най-разпространеният bucket (38%), следван от xhdpi (28%) и xxxhdpi (18%).
  • VectorDrawable замества 5 растерни файла и се мащабира без загуба на качество.
  • Използвайте WebP вместо PNG за спестяване на 30% трафик и пространство.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също