نشرح جوهر 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 — بكسل لكل بوصة، أو dpi — نقطة لكل بوصة). يستخدم Android مفهوم Density Buckets — مجموعات من الشاشات ذات كثافة متشابهة تستخدم نفس عوامل القياس. على عكس الدقة (عدد البكسلات في العرض والارتفاع)، تحدد الكثافة الحجم الفعلي للبكسل على الشاشة. وفقاً لـ Google Pixel Team (2025)، تبلغ كثافة الهواتف الرائدة الحديثة 450-550 ppi، وهو ما يتوافق مع حاوية xxhdpi-xxxhdpi.
ظهر نظام Density Buckets في Android 1.6 Donut (2009) مع أول الأجهزة عند 160 dpi (mdpi). مع نمو دقة الشاشات، تمت إضافة حاويات جديدة: hdpi (Android 1.6)، xhdpi (Android 2.3)، xxhdpi (Android 4.1)، xxxhdpi (Android 4.4). تعكس كل حاوية جديدة زيادة بمقدار 1.5× أو 2× في الكثافة مقارنة بالسابقة. وفقاً لـ Android Open Source Project (2025)، 96% من أجهزة Android النشطة الآن لها كثافات تتراوح من hdpi إلى xxxhdpi.
Density Buckets هي نطاقات كثافة محددة من قبل Google لتجميع شاشات Android. الحاوية الأساسية هي mdpi (160 dpi). يوضح عامل القياس عدد المرات التي يكون فيها المورد لحاوية معينة أكبر مقارنة بـ mdpi. على سبيل المثال، xhdpi (2×) تعني أن الصورة يجب أن تكون أكبر مرتين في العرض والارتفاع من نسختها mdpi. وفقاً لـ Android Studio Resource Manager (2025)، xxhdpi هي الحاوية الأكثر شيوعاً بين الأجهزة النشطة (38% من حصة السوق)، تليها xhdpi (28%).
| الحاوية | نطاق DPI | القياس | مثال جهاز | حصة السوق (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | الأجهزة الاقتصادية القديمة | أقل من 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1)، أجهزة لوحية 7" | 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). كثافة الشاشة هي عدد البكسلات لكل بوصة. جهازان بنفس الدقة قد يكون لهما كثافة مختلفة إذا اختلفت أحجام الشاشة الفعلية. على سبيل المثال، هاتف 6 بوصات بدقة 1080×2400 له كثافة حوالي 440 dpi (xxhdpi)، بينما هاتف 5 بوصات بنفس الدقة له حوالي 530 dpi (xxxhdpi). هذا فرق رئيسي: يجب أن تتكيف الواجهة ليس مع الدقة بل مع الكثافة، وإلا ستكون العناصر صغيرة جداً على الأجهزة عالية الكثافة.
يستخدم Android مؤهلات في أسماء مجلدات res لتحميل الموارد لكثافة شاشة محددة: drawable-mdpi، drawable-hdpi، drawable-xhdpi، drawable-xxhdpi، drawable-xxxhdpi. عند بدء التطبيق، يختار Android الموارد من المجلد الذي يتطابق بشكل أفضل مع كثافة الجهاز. إذا لم يكن هناك تطابق تام، يستخدم النظام أقرب حاوية أو يقيس مورداً من كثافة أقل. وفقاً لـ 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 يُضرب في عامل القياس لكل حاوية. يختار Android تلقائياً الملف الصحيح بناءً على DisplayMetrics.density للجهاز. بالنسبة لـ VectorDrawable (تنسيق XML)، ملف واحد في drawable/ كافٍ — يقوم النظام بقياسه دون فقدان الجودة.
حساب حجم الصورة لكل كثافة يعتمد على معادلة بسيطة: الحجم في mdpi × عامل القياس. إذا كان أيقونة في mdpi بحجم 48×48 بكسل، فإنها ستكون في hdpi 72×72 بكسل (48 × 1.5)، وفي xhdpi — 96×96 بكسل (48 × 2)، وفي xxhdpi — 144×144 بكسل (48 × 3)، وفي xxxhdpi — 192×192 بكسل (48 × 4). وفقاً لـ Material Design Guidelines (2025)، تنطبق هذه المعادلة على جميع الموارد النقطية: الأيقونات والخلفيات والصور و 9-patch.
| الحاوية | القياس | حجم mdpi (px) | حجم في الحاوية (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/ بدون مؤهل — سيقوم النظام بقياسها مع فقدان الجودة. رابعاً، اختبر على جهاز بكثافة مختلفة عن كثافتك الرئيسية — المحاكي يسمح بتغيير الكثافة. خامساً، استخدم WebP بدلاً من PNG — وفقاً لـ Google (2025)، يوفر WebP حجماً أصغر بنسبة 25-35% بنفس الجودة.
الأسئلة الشائعة
mdpi (medium-density pixel-independent) — حاوية الكثافة الأساسية في Android بكثافة 160 dpi. يتم حساب جميع الحاويات الأخرى بالنسبة لـ mdpi: hdpi — 1.5×، xhdpi — 2×، وهكذا. mdpi يقابل بكسل فعلي واحد لكل بكسل مستقل عن الكثافة (dp). يستخدم المصممون mdpi كمرجع عند إنشاء التخطيطات.
استخدم DisplayMetrics: getResources().getDisplayMetrics().density يعيد عامل القياس (1.0 لـ mdpi، 3.0 لـ xxhdpi). لتحديد الحاوية برمجياً، استدعِ getResources().getConfiguration().densityDpi. يحتوي Android Studio أيضاً على Device Explorer يظهر densityDpi للأجهزة المتصلة.
تقنياً — نعم، ولكن مع فقدان الجودة. إذا كان المورد متاحاً فقط في drawable-xxhdpi، على جهاز mdpi سيتم تقليله 3× — ستصبح الصورة ضبابية. إذا كان المورد فقط في mdpi، على xxhdpi سيتم تكبيره — ظهور بكسل. يوصى بإعداد الأقل لـ xhdpi و xxhdpi و xxxhdpi — هذا يغطي 84% من الأجهزة النشطة (2025). بالنسبة لـ VectorDrawable، ملف واحد بدون مؤهل كافٍ.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.