Multi-Window هو مجموعة من أوضاع تعدد المهام في Android تتيح تشغيل عدة تطبيقات على الشاشة في وقت واحد. يتضمن النظام ثلاثة أوضاع: Split Screen لتقسيم الشاشة إلى جزأين، Picture-in-Picture للفيديو في نافذة مصغرة، و Freeform لنوافذ ذات حجم عشوائي على الشاشات الكبيرة. وفقًا لـ Android Developers (2025)، فإن دعم Multi-Window إلزامي للأجهزة التي يبلغ عرض شاشتها 600 dp أو أكثر، ويجب على كل مطور تكييف تطبيقه مع تغييرات حجم النافذة المحتملة.
الخلاصة
Multi-Window هي ميزة في Android تم تقديمها في الإصدار 7.0 Nougat (API 24) تتيح تشغيل تطبيقين أو أكثر على الشاشة في وقت واحد. كان هذا الوضع استجابة Google للشعبية المتزايدة للأجهزة اللوحية والشاشات الكبيرة، حيث يحد وضع المهمة الواحدة من الإنتاجية.
قبل Android 7.0، كان كل تطبيق يشغل الشاشة بأكملها — عند التبديل بين التطبيقات، كان التطبيق السابق يُصغر. غير Multi-Window هذا النموذج: الآن يمكن للتطبيق أن يشغل جزءًا من الشاشة مع الحفاظ على حالته النشطة. بالنسبة للمطورين، هذا يعني أن onConfigurationChanged ومعالجة تغييرات الحجم تصبح إلزامية.
في Android 12L (2022)، جعل Google Multi-Window الوضع الافتراضي للأجهزة ذات الشاشات الكبيرة — جميع التطبيقات على الأجهزة اللوحية تعمل في وضع يسمح بالنوافذ المتعددة. الاستثناءات الوحيدة هي التطبيقات ذات الحظر الصريح في المانيifest.
Split Screen — الوضع الأكثر شيوعًا. يتم تقسيم الشاشة إلى جزأين أفقيًا أو رأسيًا، ويقوم المستخدم بسحب الفاصل. متاح على الهواتف والأجهزة اللوحية. يتم التنشيط عبر Overview (Recents) — عن طريق سحب أيقونة التطبيق إلى الحافة العلوية أو السفلية.
Picture-in-Picture (PiP) — وضع لتطبيقات الفيديو والملاحة. يتم عرض المحتوى في نافذة مصغرة عائمة (حوالي 15–25% من الشاشة) يمكن تحريكها. متاح على Android 8.0+. للتنشيط، استخدم enterPictureInPictureMode() في Activity.
Freeform — وضع للنوافذ ذات الحجم العشوائي، يشبه مديري النوافذ على سطح المكتب. متاح على Android TV وبعض أجهزة الشاشات الكبيرة من الشركات المصنعة (Samsung DeX). تعمل التطبيقات في نوافذ بشريط عنوان و أزرار تحكم.
عندما يقوم المستخدم بتنشيط Multi-Window، يقوم Android بإنشاء مثيل Activity جديد لكل تطبيق ويوزع مساحة الشاشة المتاحة. يتم وضع الأنشطة في Tasks منفصلة ولكنها تستخدم نفس StackView مع فاصل بينها.
يقوم النظام بإخطار كل Activity بتغيير الحجم من خلال onConfigurationChanged(). إذا لم تعالج Activity هذا الحدث، يتم إعادة إنشائها. بالنسبة لـ Split Screen، يمكن أن ينخفض عرض النافذة إلى 220 dp — الحد الأدنى للعرض الذي تدعمه المنصة.
يسمح Android للتطبيق بتعريف عرض أدنى من خلال android:minWidth و android:minHeight في المانيifest. إذا كانت المساحة المتاحة أقل من هذه القيم، تدخل Activity في حالة الإيقاف المؤقت.
لدعم Multi-Window، تحتاج إلى تعيين العلامة android:resizeableActivity="true" في المانيifest. هذا يعني أن التطبيق يمكنه تغيير الحجم عندما تتغير النافذة. افتراضيًا على Android 12L+، تعتبر جميع التطبيقات قابلة لتغيير الحجم — يتم تجاهل العلامة.
عندما يتغير حجم النافذة، يمكن إعادة إنشاء Activity (افتراضيًا) أو معالجة الحدث في onConfigurationChanged إذا تم تحديد configChanges="screenSize|smallestScreenSize" في المانيifest. يُوصى بتحديد configChanges للأنشطة الرئيسية لتجنب فقدان الحالة.
<activity
android:name=".MainActivity"
android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|orientation" />
بالنسبة للتطبيقات التي لا تدعم تغيير الحجم، يعرض Android مربع حوار تحذيري. في هذه الحالة، عند التبديل إلى وضع النوافذ المتعددة، قد يقوم النظام بإنهاء Activity وإظهار snackbar مع عرض لإعادة التشغيل.
يغير Multi-Window دورة حياة Activity القياسية. عندما يصبح تطبيق آخر نشطًا في النافذة المجاورة، تتلقى Activity الحالية استدعاء onPause() ولكن ليس onStop() — تظل مرئية، وإن لم تكن في التركيز. هذا مهم: يجب أن يستمر مشغل الفيديو في التشغيل عند onPause، وليس عند onStop.
يحتاج المطورون إلى التمييز بين الحالات: onPause + isInMultiWindowMode() = true يعني فقط فقدان التركيز، وليس الخروج من الشاشة. بالنسبة للفيديو والرسوم المتحركة، هذه إشارة لعدم إيقاف التشغيل ولكن فقط لإلغاء تحديد عناصر التحكم.
عند الخروج من Multi-Window، يتم استدعاء onMultiWindowModeChanged() قبل onResume(). هذا يعطي الفرصة لإعادة بناء الواجهة لوضع ملء الشاشة قبل أن يبدأ المستخدم في التفاعل.
القاعدة الأولى هي حفظ الحالة. في وضع النوافذ المتعددة، يمكن إعادة إنشاء Activity في أي لحظة. استخدم SavedStateHandle في ViewModel أو onSaveInstanceState لجميع البيانات التي يجب أن تستمر بين تغييرات التكوين.
القاعدة الثانية هي الاختبار بعرض أدنى يبلغ 220 dp. تعتبر هذه القيمة أضيق نافذة في Split Screen. يجب أن تظل الواجهة قابلة للقراءة والعملية. إذا تجاوزت بعض العناصر الحدود، استخدم Window Size Class للتبديل بين التخطيطات.
القاعدة الثالثة هي تعطيل الوظائف التي لا تعمل في Multi-Window. على سبيل المثال، قد لا تكون Camera متاحة إذا كانت الشاشة صغيرة جدًا. تحقق من isInMultiWindowMode() قبل بدء تشغيل الكاميرا أو وظائف ملء الشاشة الأخرى.
الأسئلة الشائعة
قم بتعيين android:resizeableActivity="false" في المانيifest. على Android 12L+، يتم تجاهل العلامة للأجهزة ذات الشاشات الكبيرة، لذا للحظر الكامل استخدم android:maxAspectRatio.
قم باستدعاء isInMultiWindowMode() من Activity. يعيد الأسلوب true إذا كان التطبيق يعمل في Split Screen أو PiP أو Freeform. يمكنك أيضًا الاشتراك في onMultiWindowModeChanged().
على Android TV، يتوفر فقط وضع Picture-in-Picture. Split Screen و Freeform غير مدعومين — تستخدم أجهزة التلفزيون شاشة رئيسية واحدة مع نافذة PiP في الزاوية.
تستمر خدمة المقدمة في العمل بغض النظر عن الوضع. ومع ذلك، إذا تحول التطبيق إلى PiP، فقد يقوم النظام بإيقاف التنفيذ مؤقتًا لتوفير الموارد.
يدعم Android السحب والإفلات بين النوافذ في Multi-Window عبر ClipData و View.OnDragListener. يتم نقل البيانات من خلال ContentProvider أو Intent مع FLAG_GRANT_READ_URI_PERMISSION.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.