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, что соответствует bucket 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 отражал полуторный или двойной рост плотности относительно предыдущего. По данным 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%

Плотность пикселей vs разрешение экрана: в чём разница

Разрешение экрана — это общее количество пикселей по ширине и высоте (например, 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 — для масштабируемых фонов. Один файл работает на всех плотностях при правильной настройке stretch-областей.
  • 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также