توضیح میدهیم که Screen Density (Density Buckets) در Android چیست — طبقهبندی صفحهنمایشها بر اساس تراکم پیکسل: mdpi، hdpi، xhdpi، xxhdpi، xxxhdpi. Screen Density تعیین میکند که چه تعداد پیکسل فیزیکی در یک اینچ از صفحهنمایش قرار میگیرد و مستقیماً بر نحوه نمایش تصاویر و رابط کاربری در دستگاههای مختلف تأثیر میگذارد. بر اساس Google Android Compatibility Definition (2025)، Android از 6 Density Bucket اصلی و حداکثر 8 bucket اضافی برای دستگاههای تاشو پشتیبانی میکند.
نکات اصلی
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 در Android 1.6 Donut (2009) با اولین دستگاههای با تراکم 160 dpi (mdpi) ظاهر شد. با افزایش وضوح صفحهنمایشها، bucketهای جدید اضافه شدند: hdpi (Android 1.6)، xhdpi (Android 2.3)، xxhdpi (Android 4.1)، xxxhdpi (Android 4.4). هر bucket جدید نشاندهنده افزایش 1.5 یا 2 برابری تراکم نسبت به bucket قبلی بود. بر اساس Android Open Source Project (2025)، در حال حاضر 96% از دستگاههای فعال Android دارای تراکم از hdpi تا 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%).
| Bucket | محدوده DPI | Scale | دستگاه نمونه | سهم بازار (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | دستگاههای قدیمی ارزانقیمت | کمتر از 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1)، تبلتهای ۷ اینچی | 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% |
وضوح صفحهنمایش — تعداد کل پیکسلها در عرض و ارتفاع است (مثلاً 1080×2400). تراکم صفحهنمایش — تعداد پیکسلها در هر اینچ است. دو دستگاه با وضوح یکسان میتوانند تراکم متفاوتی داشته باشند اگر اندازه فیزیکی صفحهنمایش متفاوت باشد. به عنوان مثال، یک تلفن ۶ اینچی با وضوح 1080×2400 دارای تراکم حدود 440 dpi (xxhdpi) است، در حالی که یک تلفن ۵ اینچی با همان وضوح حدود 530 dpi (xxxhdpi) تراکم دارد. این تفاوت کلیدی است: رابط کاربری باید نه با وضوح، بلکه با تراکم سازگار شود، در غیر این صورت عناصر در دستگاههای با تراکم بالا بسیار کوچک خواهند بود.
Android از qualifiers در نام پوشههای res برای بارگذاری منابع برای تراکم خاص صفحهنمایش استفاده میکند: drawable-mdpi، drawable-hdpi، drawable-xhdpi، drawable-xxhdpi، drawable-xxxhdpi. هنگام راهاندازی برنامه، Android منابع را از پوشهای که بهترین تطابق را با تراکم دستگاه دارد انتخاب میکند. اگر تطابق دقیقی وجود نداشته باشد، سیستم نزدیکترین bucket را میگیرد یا منبع را از تراکم پایینتر مقیاسبندی میکند. بر اساس Android Docs (2025)، برای وکتورها (VectorDrawable) تعیینکنندههای تراکم لازم نیست — آنها به صورت خودکار مقیاسبندی میشوند.
/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 در ضریب مقیاسبندی برای هر 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.
| Bucket | Scale | اندازه mdpi (px) | اندازه در bucket (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 |
آمادهسازی صحیح منابع برای Density Buckets شامل پنج قانون کلیدی است. اول، برای آیکونهای ساده از VectorDrawable استفاده کنید — این کار نیاز به پنج نسخه را از بین میبرد. دوم، برای تصاویر شطرنجی، همه تراکمها را یکباره از ابزارهای طراحی صادر کنید (Android Studio Asset Studio به طور خودکار تولید میکند). سوم، از قرار دادن تصاویر در drawable/ بدون تعیینکننده خودداری کنید — سیستم با افت کیفیت مقیاسبندی میکند. چهارم، روی دستگاهی با تراکم متفاوت از دستگاه اصلی خود تست کنید — شبیهساز امکان تغییر تراکم را فراهم میکند. پنجم، به جای PNG از WebP استفاده کنید — بر اساس Google (2025)، WebP با همان کیفیت 25-35% اندازه کوچکتری دارد.
سوالات متداول
mdpi (medium-density pixel-independent) — Density Bucket اصلی Android با تراکم 160 dpi است. همه bucketهای دیگر نسبت به mdpi محاسبه میشوند: hdpi — 1.5×، xhdpi — 2× و غیره. mdpi معادل یک پیکسل فیزیکی به ازای هر density-independent pixel (dp) است. طراحان هنگام ایجاد طرحبندیها دقیقاً بر اساس mdpi کار میکنند.
از 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 یک فایل بدون تعیینکننده کافی است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید