Android-da Screen Density (Density Buckets) mohiyatini — ekranlarning piksel zichligi bo'yicha tasnifini tushuntiramiz: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density ekranning bir dyuymiga qancha fizik piksel sig'ishini aniqlaydi va tasvirlar hamda interfeysning turli qurilmalarda qanday ko'rinishiga bevosita ta'sir qiladi. Google Android Compatibility Definition (2025) ma'lumotiga ko'ra, Android 6 asosiy Density Buckets va buklanadigan qurilmalar uchun 8 ta qo'shimcha bucketni qo'llab-quvvatlaydi.
Asosiy fikrlar
Screen Density (ekran zichligi) — ekranning bir dyuymiga to'g'ri keladigan fizik piksellar soni (ppi — pixels per inch, yoki dpi — dots per inch). Android Density Buckets tushunchasidan foydalanadi — o'xshash zichlikdagi ekran guruhlari, ular uchun bir xil masshtablash koeffitsiyentlari qo'llaniladi. Rezolyutsiyadan (en va bo'y bo'yicha piksel soni) farqli o'laroq, zichlik ekrandagi pikselning fizik o'lchamini aniqlaydi. Google Pixel Team (2025) ma'lumotiga ko'ra, zamonaviy flagmanlarning zichligi 450-550 ppi ni tashkil etadi, bu xxhdpi-xxxhdpi bucketlariga mos keladi.
Density Buckets tizimi Android 1.6 Donut (2009) bilan 160 dpi (mdpi) zichlikdagi birinchi qurilmalarda paydo bo'ldi. Ekran rezolyutsiyasining oshishi bilan yangi bucketlar qo'shildi: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Har bir yangi bucket oldingisiga nisbatan 1.5 yoki 2 baravar zichlik o'sishini aks ettirardi. Android Open Source Project (2025) ma'lumotiga ko'ra, hozirda faol Android qurilmalarining 96% hdpi dan xxxhdpi gacha zichlikka ega.
Density Buckets — Google tomonidan Android ekranlarini guruhlash uchun belgilangan zichlik diapazonlari. Asosiy bucket — mdpi (160 dpi). Masshtablash koeffitsiyenti (scale factor) berilgan bucket uchun resurs mdpi dan necha marta katta ekanligini ko'rsatadi. Masalan, xhdpi (2×) tasvir kengligi va balandligi bo'yicha mdpi versiyasidan 2 marta katta bo'lishi kerakligini anglatadi. Android Studio Resource Manager (2025) ma'lumotiga ko'ra, xxhdpi faol qurilmalar orasida eng keng tarqalgan bucket (38% bozor), undan keyin xhdpi (28%).
| Bucket | DPI diapazoni | Scale | Namuna qurilma | Bozor ulushi (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Eski byudjet qurilmalari | 1% dan kam |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7″ planshetlar | 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 rezolyutsiyasi — en va bo'y bo'yicha piksellarning umumiy soni (masalan, 1080×2400). Ekran zichligi — dyuymdagi piksellar soni. Bir xil rezolyutsiyaga ega ikkita qurilma, ekranning fizik o'lchamlari farq qilsa, turli zichlikka ega bo'lishi mumkin. Masalan, 6 dyuymli telefon 1080×2400 rezolyutsiyasi bilan taxminan 440 dpi (xxhdpi) zichlikka, xuddi shu rezolyutsiyadagi 5 dyuymli telefon esa taxminan 530 dpi (xxxhdpi) zichlikka ega. Bu asosiy farq: interfeys rezolyutsiyaga emas, balki zichlikka moslashishi kerak, aks holda yuqori zichlikdagi qurilmalarda elementlar juda kichik bo'ladi.
Android res papkalari nomlarida muayyan ekran zichligi uchun resurslarni yuklash uchun qualifiers dan foydalanadi: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Ilova ishga tushganda, Android qurilma zichligiga eng mos keladigan papkadan resurslarni tanlaydi. Aniq moslik bo'lmasa, tizim eng yaqin bucketni oladi yoki pastroq zichlikdan resursni masshtablaydi. Android Docs (2025) ma'lumotiga ko'ra, vektorlar (VectorDrawable) uchun zichlik kvalifikatorlari kerak emas — ular avtomatik masshtablanadi.
/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)
Ushbu tuzilmada har bir papka bir xil ikonkani o'z ichiga oladi, lekin pikseldagi turli fizik o'lchamda. mdpi uchun asosiy o'lcham 48×48 piksel har bir bucket uchun scale factor ga ko'paytiriladi. Android qurilmaning DisplayMetrics.density asosida avtomatik ravishda kerakli faylni tanlaydi. VectorDrawable (XML format) uchun drawable/ papkasida bitta fayl yetarli — tizim uni sifat yo'qotmasdan masshtablaydi.
O'lchamni hisoblash har bir zichlik uchun oddiy formulaga asoslanadi: mdpi-dagi o'lcham × scale factor. mdpi-da ikonka 48×48 px o'lchamda bo'lsa, hdpi uchun 72×72 px (48 × 1.5), xhdpi uchun 96×96 px (48 × 2), xxhdpi uchun 144×144 px (48 × 3), xxxhdpi uchun 192×192 px (48 × 4) bo'ladi. Material Design Guidelines (2025) ma'lumotiga ko'ra, bu formula barcha rastr resurslariga qo'llaniladi: ikonkalar, fonlar, tasvirlar va 9-patch.
| Bucket | Scale | mdpi o'lchami (px) | Bucketdagi o'lcham (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 |
To'g'ri tayyorlash Density Buckets uchun beshta asosiy qoidani o'z ichiga oladi. Birinchidan, oddiy ikonkalar uchun VectorDrawable dan foydalaning — bu besh nusxaga ehtiyojni yo'q qiladi. Ikkinchidan, rastr tasvirlar uchun dizayn vositalaridan barcha zichliklarni bir vaqtning o'zida eksport qiling (Android Studio Asset Studio avtomatik yaratadi). Uchinchidan, tasvirlarni kvalifikatorsiz drawable/ papkasiga joylashtirishdan saqlaning — tizim sifat yo'qotishi bilan masshtablaydi. To'rtinchidan, asosiy qurilmangizdan farqli zichlikdagi qurilmada sinov o'tkazing — emulator zichlikni o'zgartirishga imkon beradi. Beshinchidan, PNG o'rniga WebP dan foydalaning — Google (2025) ma'lumotiga ko'ra, WebP bir xil sifatda 25-35% kichikroq o'lcham beradi.
Tez-tez so'raladigan savollar
mdpi (medium-density pixel-independent) — 160 dpi zichlikdagi asosiy Density Bucket. Barcha boshqa bucketlar mdpi ga nisbatan hisoblanadi: hdpi — 1.5×, xhdpi — 2× va hokazo. mdpi bir density-independent pixel (dp) ga bitta fizik pikselga to'g'ri keladi. Dizaynerlar maketlar yaratishda aynan mdpi ga tayanadilar.
DisplayMetrics dan foydalaning: getResources().getDisplayMetrics().density scale factor ni qaytaradi (mdpi uchun 1.0, xxhdpi uchun 3.0). Bucketni dasturiy aniqlash uchun getResources().getConfiguration().densityDpi chaqiring. Android Studio da ulangan qurilmaning densityDpi sini ko'rsatadigan Device Explorer ham mavjud.
Texnik jihatdan — ha, lekin sifat yo'qotishi bilan. Resurs faqat drawable-xxhdpi da bo'lsa, mdpi qurilmada 3 marta kichraytiriladi — tasvir xiralashadi. Resurs faqat mdpi da bo'lsa, xxhdpi da kattalashtiriladi — piksellanish paydo bo'ladi. Tavsiya etiladi kamida xhdpi, xxhdpi va xxxhdpi uchun tayyorlash — bu faol qurilmalarning 84% ini qamrab oladi (2025). VectorDrawable uchun kvalifikatorsiz bitta fayl yetarli.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.