Android'de Screen Density (Density Buckets) kavramının özünü açıklıyoruz — ekranların piksel yoğunluğuna göre sınıflandırılması: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density, bir inçlik ekrana kaç fiziksel piksel sığdığını belirler ve görüntülerin ve arayüzün farklı cihazlarda nasıl görüntüleneceğini doğrudan etkiler. Google Android Compatibility Definition (2025)'e göre Android, 6 ana Density Buckets ve katlanabilir cihazlar için 8'e kadar ek Buckets destekler.
Önemli Noktalar
Screen Density, bir inçlik ekran başına düşen fiziksel piksel sayısıdır (ppi — inç başına piksel veya dpi — inç başına nokta). Android, Density Buckets kavramını kullanır — benzer yoğunluğa sahip ekran grupları aynı ölçekleme faktörlerini kullanır. Çözünürlükten (genişlik ve yükseklikteki piksel sayısı) farklı olarak yoğunluk, ekrandaki bir pikselin fiziksel boyutunu belirler. Google Pixel Team (2025)'e göre modern amiral gemilerinin yoğunluğu 450-550 ppi'dir ve bu xxhdpi-xxxhdpi bucket'ına karşılık gelir.
Density Buckets sistemi, Android 1.6 Donut (2009)'da 160 dpi (mdpi) ile ilk cihazlarla ortaya çıktı. Ekran çözünürlükleri arttıkça yeni buckety'ler eklendi: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Her yeni bucket, bir öncekine göre 1.5× veya 2× yoğunluk artışını yansıtıyordu. Android Open Source Project (2025)'e göre aktif Android cihazlarının %96'sı artık hdpi'den xxxhdpi'ye kadar değişen yoğunluklara sahiptir.
Density Buckets, Google tarafından Android ekranlarını gruplandırmak için tanımlanmış yoğunluk aralıklarıdır. Temel bucket mdpi'dir (160 dpi). Ölçek faktörü, belirli bir bucket için bir kaynağın mdpi'ye kıyasla ne kadar büyük olduğunu gösterir. Örneğin, xhdpi (2×), görüntünün genişlik ve yükseklik olarak mdpi sürümünden 2 kat daha büyük olması gerektiği anlamına gelir. Android Studio Resource Manager (2025)'e göre xxhdpi, aktif cihazlar arasında en yaygın buckettır (%38 pazar payı), ardından xhdpi (%28) gelir.
| Bucket | DPI Aralığı | Ölçek | Cihaz Örneği | Pazar Payı (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Eski bütçe cihazları | %1'den az |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7" tabletler | %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 |
Ekran çözünürlüğü, genişlik ve yükseklikteki toplam piksel sayısıdır (ör. 1080×2400). Ekran yoğunluğu, inç başına piksel sayısıdır. Aynı çözünürlükteki iki cihazın fiziksel ekran boyutları farklıysa yoğunlukları farklı olabilir. Örneğin, 1080×2400 çözünürlüğe sahip 6 inçlik bir telefon yaklaşık 440 dpi (xxhdpi) yoğunluğa sahipken, aynı çözünürlüğe sahip 5 inçlik bir telefon yaklaşık 530 dpi (xxxhdpi) yoğunluğa sahiptir. Bu önemli bir farktır: arayüz çözünürlüğe değil yoğunluğa göre uyum sağlamalıdır, aksi takdirde yüksek yoğunluklu cihazlarda öğeler çok küçük olur.
Android, belirli bir ekran yoğunluğu için kaynakları yüklemek üzere res klasör adlarında niteleyiciler kullanır: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Uygulama başlatıldığında Android, cihazın yoğunluğuna en uygun klasörden kaynakları seçer. Tam eşleşme yoksa sistem en yakın bucket'ı kullanır veya daha düşük bir yoğunluktan kaynağı ölçeklendirir. Android Docs (2025)'e göre vektörler (VectorDrawable) için yoğunluk niteleyicileri gerekmez — otomatik olarak ölçeklenirler.
/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)
Bu yapıda her klasör aynı simgeyi içerir ancak farklı fiziksel piksel boyutunda. Mdpi için 48×48 piksellik temel boyut, her bucket'ın ölçek faktörüyle çarpılır. Android, cihazın DisplayMetrics.density değerine göre otomatik olarak doğru dosyayı seçer. VectorDrawable (XML formatı) için drawable/ içinde tek bir dosya yeterlidir — sistem kalite kaybı olmadan ölçeklendirir.
Boyut hesaplaması her yoğunluk için basit bir formüle dayanır: mdpi'deki boyut × ölçek faktörü. Mdpi'deki bir simge 48×48 px ise, hdpi için 72×72 px (48 × 1.5), xhdpi için — 96×96 px (48 × 2), xxhdpi için — 144×144 px (48 × 3), xxxhdpi için — 192×192 px (48 × 4) olacaktır. Material Design Guidelines (2025)'e göre bu formül tüm raster kaynaklar için geçerlidir: simgeler, arka planlar, görüntüler ve 9-patch.
| Bucket | Ölçek | Mdpi Boyutu (px) | Bucket Boyutu (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 |
Doğru hazırlık Density Buckets için kaynakların beş temel kural içerir. Birincisi, basit simgeler için VectorDrawable kullanın — bu, beş kopya ihtiyacını ortadan kaldırır. İkincisi, raster görüntüler için tüm yoğunlukları tasarım araçlarından dışa aktarın (Android Studio Asset Studio otomatik olarak oluşturur). Üçüncüsü, niteleyici olmadan drawable/ içine görüntü koymaktan kaçının — sistem kalite kaybıyla ölçeklendirir. Dördüncüsü, ana cihazınızdan farklı yoğunluğa sahip bir cihazda test edin — emülatör yoğunluğu değiştirmeye izin verir. Beşincisi, PNG yerine WebP kullanın — Google (2025)'e göre WebP, aynı kalitede %25-35 daha küçük boyut sağlar.
Sıkça Sorulan Sorular
mdpi (medium-density pixel-independent) — Android'de 160 dpi yoğunluğa sahip temel Density Bucket'dır. Diğer tüm buckety'ler mdpi'ye göre hesaplanır: hdpi — 1.5×, xhdpi — 2× vb. mdpi, yoğunluktan bağımsız piksel (dp) başına bir fiziksel piksele karşılık gelir. Tasarımcılar düzen oluştururken mdpi'yi referans olarak kullanır.
DisplayMetrics kullanın: getResources().getDisplayMetrics().density ölçek faktörünü döndürür (mdpi için 1.0, xxhdpi için 3.0). Bucket'ı programlı olarak belirlemek için getResources().getConfiguration().densityDpi'yi çağırın. Android Studio'da ayrıca bağlı cihazlar için densityDpi gösteren bir Device Explorer bulunur.
Teknik olarak — evet, ancak kalite kaybıyla. Kaynak yalnızca drawable-xxhdpi'de mevcutsa, mdpi cihazında 3 kat küçültülür — görüntü bulanıklaşır. Kaynak yalnızca mdpi'deyse, xxhdpi'de büyütülür — piksellenme. Öneri en azından xhdpi, xxhdpi ve xxxhdpi için hazırlık yapmaktır — bu, aktif cihazların %84'ünü (2025) kapsar. VectorDrawable için niteleyicisiz tek bir dosya yeterlidir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun