Screen Density: istota, gęstość pikseli w Android

Autor: IT Sectr Opublikowano: 2026-02-25 Czas czytania: 6 min

Wyjaśniamy, czym jest Screen Density (Density Buckets) w Android — klasyfikacja ekranów według gęstości pikseli: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density określa, ile fizycznych pikseli mieści się w jednym calu ekranu i bezpośrednio wpływa na to, jak obrazy i interfejs są wyświetlane na różnych urządzeniach. Według Google Android Compatibility Definition (2025), Android obsługuje 6 głównych Density Buckets i do 8 dodatkowych dla urządzeń składanych.

Najważniejsze

  • Screen Density — liczba fizycznych pikseli na cal (PPI). Android grupuje ekrany w Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi.
  • Podstawowy bucket — mdpi (160 dpi). Wszystkie pozostałe są obliczane względem niego: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×.
  • Zasoby dla różnych gęstości są przechowywane w kwalifikowanych folderach res/drawable-{density}.
  • Według Android Studio (2025), najczęściej spotykaną gęstością na nowoczesnych urządzeniach jest xxhdpi (420+ dpi, 3×).
  • Screen Density nie zależy od rozdzielczości ekranu — dwa urządzenia z tą samą rozdzielczością mogą mieć różną gęstość.

Czym jest Screen Density?

Screen Density (gęstość ekranu) — to liczba fizycznych pikseli przypadających na jeden cal ekranu (ppi — pixels per inch, lub dpi — dots per inch). Android używa pojęcia Density Buckets — grup ekranów o podobnej gęstości, dla których stosowane są te same współczynniki skalowania. W przeciwieństwie do rozdzielczości (liczba pikseli w szerokości i wysokości), gęstość określa fizyczny rozmiar piksela na ekranie. Według Google Pixel Team (2025), gęstość nowoczesnych flagowców wynosi 450-550 ppi, co odpowiada bucketom xxhdpi-xxxhdpi.

Historia i ewolucja Density Buckets

System Density Buckets pojawił się w Android 1.6 Donut (2009) z pierwszymi urządzeniami o gęstości 160 dpi (mdpi). Wraz ze wzrostem rozdzielczości ekranów dodawano nowe buckety: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Każdy nowy bucket odzwierciedlał półtorakrotny lub dwukrotny wzrost gęstości względem poprzedniego. Według Android Open Source Project (2025), obecnie 96% aktywnych urządzeń Android ma gęstość od hdpi do xxxhdpi.

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

Density Buckets — to zakresy gęstości określone przez Google do grupowania ekranów Android. Podstawowy bucket — mdpi (160 dpi). Współczynnik skalowania (scale factor) pokazuje, ile razy zasób dla danego bucketa jest większy niż dla mdpi. Na przykład xhdpi (2×) oznacza, że obraz powinien być 2 razy większy pod względem szerokości i wysokości niż jego wersja mdpi. Według Android Studio Resource Manager (2025), xxhdpi jest najczęściej spotykanym bucketem wśród aktywnych urządzeń (38% rynku), a za nim xhdpi (28%).

BucketZakres DPIScalePrzykładowe urządzenieUdział w rynku (2025)
ldpi120 dpi0.75×Stare budżetowe urządzeniaPoniżej 1%
mdpi120-160 dpiHTC Dream (G1), tablety 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%

Gęstość pikseli a rozdzielczość ekranu: jaka jest różnica

Rozdzielczość ekranu — to całkowita liczba pikseli w szerokości i wysokości (np. 1080×2400). Gęstość ekranu — liczba pikseli na cal. Dwa urządzenia z tą samą rozdzielczością mogą mieć różną gęstość, jeśli różnią się fizycznymi rozmiarami ekranu. Na przykład 6-calowy telefon z rozdzielczością 1080×2400 ma gęstość około 440 dpi (xxhdpi), a 5-calowy z tą samą rozdzielczością — około 530 dpi (xxxhdpi). To kluczowa różnica: interfejs powinien dostosowywać się nie do rozdzielczości, ale do gęstości, w przeciwnym razie elementy będą zbyt małe na urządzeniach o wysokiej gęstości.

Kwalifikatory zasobów gęstości w Android

Android używa qualifiers w nazwach folderów res do ładowania zasobów dla konkretnej gęstości ekranu: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Podczas uruchamiania aplikacji Android wybiera zasoby z folderu najlepiej dopasowanego do gęstości urządzenia. Jeśli nie ma dokładnego dopasowania, system bierze najbliższy bucket lub skaluje zasób z niższej gęstości. Według Android Docs (2025), dla wektorów (VectorDrawable) kwalifikatory gęstości nie są potrzebne — skalują się automatycznie.

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)

W tej strukturze każdy folder zawiera tę samą ikonę, ale w innym fizycznym rozmiarze w pikselach. Podstawowy rozmiar 48×48 pikseli dla mdpi jest mnożony przez scale factor dla każdego bucketa. Android automatycznie wybiera odpowiedni plik na podstawie DisplayMetrics.density urządzenia. Dla VectorDrawable (format XML) wystarczy jeden plik w drawable/ — system skaluje go bez utraty jakości.

Obliczanie pikseli dla każdej gęstości

Obliczanie rozmiaru obrazu dla każdej gęstości opiera się na prostym wzorze: rozmiar w mdpi × scale factor. Jeśli ikona w mdpi ma rozmiar 48×48 px, to dla hdpi będzie to 72×72 px (48 × 1.5), dla xhdpi — 96×96 px (48 × 2), dla xxhdpi — 144×144 px (48 × 3), dla xxxhdpi — 192×192 px (48 × 4). Według Material Design Guidelines (2025), ten wzór jest stosowany dla wszystkich zasobów rastrowych: ikon, tła, obrazów i 9-patch.

BucketScaleRozmiar mdpi (px)Rozmiar w bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

Najlepsze praktyki przygotowania zasobów dla wszystkich gęstości

Prawidłowe przygotowanie zasobów dla Density Buckets obejmuje pięć kluczowych zasad. Po pierwsze, używaj VectorDrawable dla prostych ikon — eliminuje to potrzebę pięciu kopii. Po drugie, dla obrazów rastrowych eksportuj z narzędzi projektowych wszystkie gęstości jednocześnie (Android Studio Asset Studio generuje automatycznie). Po trzecie, unikaj umieszczania obrazów w drawable/ bez kwalifikatora — system będzie skalował z utratą jakości. Po czwarte, testuj na urządzeniu o gęstości różnej od twojego podstawowego — emulator pozwala zmieniać gęstość. Po piąte, używaj WebP zamiast PNG — według Google (2025), WebP daje o 25-35% mniejszy rozmiar przy tej samej jakości.

  • VectorDrawable — preferowany format dla ikon i prostych ilustracji. Jeden plik XML zastępuje 5 PNG.
  • Android Studio Asset Studio — automatyczne generowanie zasobów dla wszystkich gęstości z SVG lub PNG.
  • WebP z lossless — optymalny format dla zdjęć. Rozmiar o 30% mniejszy niż PNG bez utraty jakości.
  • 9-patch — dla skalowalnych tła. Jeden plik działa na wszystkich gęstościach przy prawidłowym ustawieniu obszarów rozciągania.
  • Adaptive Icons — format ikon dla API 26+. Pozwala ustawić foreground i background osobno dla różnych gęstości.

Często zadawane pytania

Co oznacza mdpi w Android?

mdpi (medium-density pixel-independent) — podstawowy Density Bucket Android o gęstości 160 dpi. Wszystkie pozostałe buckety są obliczane względem mdpi: hdpi — 1.5×, xhdpi — 2× i tak dalej. mdpi odpowiada jednemu fizycznemu pikselowi na jeden density-independent pixel (dp). To na mdpi orientują się projektanci przy tworzeniu makiet.

Jak sprawdzić gęstość ekranu urządzenia Android?

Użyj DisplayMetrics: getResources().getDisplayMetrics().density zwraca scale factor (1.0 dla mdpi, 3.0 dla xxhdpi). Do programowego określenia bucketa wywołaj getResources().getConfiguration().densityDpi. W Android Studio dostępny jest również Device Explorer, pokazujący densityDpi dla podłączonego urządzenia.

Czy można nie przygotowywać zasobów dla wszystkich gęstości?

Technicznie — tak, ale z utratą jakości. Jeśli zasób jest tylko w drawable-xxhdpi, na urządzeniu mdpi zostanie zmniejszony 3 razy — obraz stanie się rozmyty. Jeśli zasób jest tylko w mdpi, na xxhdpi zostanie powiększony — pojawi się pikselizacja. Zaleca się przygotowanie co najmniej dla xhdpi, xxhdpi i xxxhdpi — to pokrywa 84% aktywnych urządzeń (2025). Dla VectorDrawable wystarczy jeden plik bez kwalifikatora.

Podsumowanie

  • Screen Density — liczba fizycznych pikseli na cal (dpi/ppi). Android grupuje ekrany w Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×).
  • Podstawowy bucket mdpi = 160 dpi. Wszystkie pozostałe są obliczane jako mdpi × scale factor.
  • Zasoby dla różnych gęstości są przechowywane w kwalifikowanych folderach res/drawable-{bucket}.
  • xxhdpi — najczęściej spotykany bucket (38%), następnie xhdpi (28%) i xxxhdpi (18%).
  • VectorDrawable zastępuje 5 plików rastrowych i skaluje się bez utraty jakości.
  • Używaj WebP zamiast PNG, aby zaoszczędzić 30% ruchu i miejsca.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również