وضع النافذة الحرة لنظام Android Nougat: ما هو وكيف يمكن للمطورين استخدامه

يعد وضع النوافذ المتعددة ذو الشكل الحر ميزة غير مستغلة ولا تحظى بالتقدير الكافي في Android Nougat. نفسر ما هو وكيف يمكن للمطورين دمجه.

وضع النافذة الحرة، كما تم توضيحه لأول مرة بواسطة آرس تكنيكا

عندما تم الإعلان عن Android 7.0 Nougat لأول مرة في أوائل عام 2016، فقد جلب معه ميزة مطلوبة بشدة على نظام Android الأساسي - وهي دعم النوافذ المتعددة. يدرك معظم الأشخاص أن دعم النوافذ المتعددة لتقسيم الشاشة يتم تمكينه افتراضيًا على جميع الهواتف والأجهزة اللوحية التي تعمل بنظام Android Nougat. تأتي أجهزة Android TV التي تعمل بنظام Android Nougat مزودة بدعم دعم النوافذ المتعددة للصورة داخل الصورة.

ومع ذلك، هناك وضع ثالث متعدد النوافذ موجود في Android Nougat لا يعرفه الكثير من الأشخاص: وضع النافذة الحرة. يسمح هذا الوضع لنظام Android بتقديم التطبيقات كنوافذ عائمة يمكن للمستخدم نقلها وتغيير حجمها حسب الرغبة. إنه في الأساس تطبيق Android لـ التراص مدير النافذة.

في ال وثائق Android SDK، إنها تنص على أن:

يمكن لمصنعي الأجهزة الأكبر حجمًا اختيار تمكين الوضع الحر، حيث يمكن للمستخدم تغيير حجم كل نشاط بحرية. إذا قامت الشركة المصنعة بتمكين هذه الميزة، فإن الجهاز يوفر وضع الشكل الحر بالإضافة إلى وضع تقسيم الشاشة.

وأيضا، في أندرويد 7.0 سي دي دي:

يجب أن تدعم تطبيقات الأجهزة ذات حجم الشاشة xlarge الوضع الحر.

يشير هذا إلى أن أي جهاز Android جديد بشاشة كبيرة يأتي مع Android 7.0 من المحتمل أن يكون به وضع نافذة حر ممكّن من قبل الشركة المصنعة.

ومع ذلك، هذا ليس مطلبًا صعبًا على الإطلاق. من الممكن القوة أي جهاز Android Nougat (مع تمكين خيارات المطور) لدعم وضع النافذة الحرة باستخدام إحدى طريقتين مختلفتين:


تمكين وضع النافذة الحرة على أي جهاز يعمل بنظام Android Nougat

يتيح تشغيل خيار "فرض تغيير حجم الأنشطة" إمكانية تشغيل التطبيقات في الوضع الحر على أي جهاز

الطريقة الأولى (يلزم وجود جهاز كمبيوتر مزود بـ adb)

تأكد من تمكين تصحيح أخطاء USB في خيارات المطور. بعد ذلك، قم بتوصيل جهازك بجهاز كمبيوتر مثبت عليه adb، وقم بتنفيذ الأمر التالي:

adb shell settings put global enable_freeform_support 1

الطريقة الثانية (لا توجد متطلبات إضافية)

قم بتمكين خيار "فرض تغيير حجم الأنشطة" أسفل خيارات المطور.

تتطلب كلتا الطريقتين إعادة تشغيل واجهة مستخدم النظام قبل أن تدخل حيز التنفيذ. أسهل طريقة للقيام بذلك هي إعادة تشغيل جهازك (أو، إذا كان جهازك متجذرًا، يمكنك ببساطة إيقاف تشغيل الجهاز com.android.systemui عملية)


حسنًا، لقد تم تمكين الوضع الحر...ماذا بعد؟

إذا قمت بتمكين الوضع الحر باستخدام الطريقة الأولى، فسيكون هناك زر جديد على إدخالات التطبيق في القائمة "نظرة عامة" لتشغيل التطبيق في وضع النافذة الحرة.

ومع ذلك، باستخدام الطريقة الثانية، لا يمكن تشغيل تطبيق في الوضع الحر من خلال نظام Android نفسه. لحسن الحظ، من الممكن لأي مشغل تابع لجهة خارجية تشغيل تطبيق في وضع النافذة الحرة باستخدام واجهات برمجة تطبيقات Android القياسية التي تم الانتهاء منها كجزء من مستوى API 24.

إن مفتاح تشغيل التطبيق في الوضع الحر هو الاتصال بـ ActivityOptions.setLaunchBounds() طريقة. تستغرق هذه الطريقة أ Rect كوسيطة، تحتوي على حدود النافذة التي سيتم تشغيل التطبيق بها.

يمكنك بعد ذلك بدء التطبيق باستخدام startActivity(Intent, Bundle). إذا لم يكن لديك بالفعل ActivityOptions حزمة، يمكنك إنشاء واحدة مع ActivityOptions.makeBasic() ومن ثم الاتصال setLaunchBounds() على الحزمة التي تم إنشاؤها حديثا.

لاحظ أنه بشكل افتراضي، إذا كانت هناك بالفعل مهمة للتطبيق موجودة في شاشة النظرة العامة، فسيتم ذلك سيقوم Android ببساطة بإعادة توجيهك إلى المهمة الحالية (ملء الشاشة) التي تم تشغيلها مسبقًا بواسطة مستخدم. ستحتاج إلى مسح أي مهام خاصة بالتطبيق في النظرة العامة قبل محاولة تشغيل التطبيق في نافذة ذات شكل حر. (بالنسبة للتطبيقات التي تتضمن أنشطة يتم تشغيلها في standard أو singleTop الأوضاع، يمكنك فرض نافذة جديدة لفتحها عن طريق إضافة Intent.FLAG_ACTIVITY_MULTIPLE_TASK إشارة إلى النية قبل الاتصال startActivity().)


كيف يعمل الوضع الحر تحت الغطاء؟

هنالك مقالة ممتازة مكتوب يشرح كيفية تنفيذ وضع النوافذ المتعددة، بما في ذلك الوضع الحر، في Android Nougat. (ملاحظة: المقالة مكتوبة باللغة الصينية، لذا تأكد من تشغيلها عبر ترجمة جوجل)

باختصار، تعمل التطبيقات في الوضع الحر في حزمة منفصلة عن بقية النظام (مثل: سطح المكتب الافتراضي). لذلك، لا يمكن تشغيل التطبيقات ذات الشكل الحر أعلى المشغل أو أعلى تطبيق آخر بملء الشاشة.

التطبيقات التي تعمل في الوضع الحر (التي لا تحتوي على android: windowIsFloating تم ضبطه على صحيح) لديك أ DecorCaptionView تمت إضافته كطفل من المستوى الأعلى DecorView. يحتوي هذا المنظر على أ LinearLayout تحديد شريط التسمية التوضيحية للنافذة لتحريك النافذة وتكبيرها وإغلاقها. على الرغم من أنني لا أوصي به شخصيًا، فمن الممكن الوصول إلى هذا العرض وتخصيصه عن طريق الحصول على DecorView استخدام Window.getDecorView()، يلقيها على ViewGroup ومن ثم الوصول إلى وجهات النظر التابعة لها.

أي تطبيق تم تصميمه للعمل بشكل جيد في وضع النوافذ المتعددة ذو الشاشة المقسمة القياسي لنظام Android سيعمل في الوضع الحر. isInMultiWindowMode() سيعود صحيحًا للتطبيقات التي تعمل في الوضع الحر. هناك عدد قليل من الفئات والأساليب الأخرى المتاحة للجمهور والتي يمكن للتطبيق استخدامها والتي تتعلق بشكل خاص بوضع الشكل الحر:

  • Window.setDecorCaptionShade(): يمكن استخدام هذه الطريقة لتجاوز ظل عناصر التحكم في التسمية التوضيحية (زر التكبير والإغلاق) للتطبيقات في الوضع الحر.
  • Window.setRestrictedCaptionAreaListener(): يمكن استخدام هذا لاكتشاف وقت تحريك النافذة في الوضع الحر. ال Window.OnRectrictedCaptionAreaChangedListener يتم استدعاؤه في كل مرة يتغير فيها موضع عناصر التحكم في التسمية التوضيحية (عندما يقوم المستخدم بتحريك النافذة)، ويوفر Rect مع الحدود الجديدة لعناصر التحكم في التسمية التوضيحية.
  • ActivityInfo.WindowLayout: تحتوي هذه الفئة على معلومات معلنة في بيان التطبيق فيما يتعلق بالموضع الأولي لنافذة ذات شكل حر يمكن أن يطلبها التطبيق عند التشغيل. على سبيل المثال، يمكنك إدراج ما يلي في علامة البيان الخاص بك:
     android: defaultHeight="640dp"
    android: defaultWidth="360dp"
    android: gravity="center" />
    بعد ذلك، عندما يكون الجهاز في الوضع الحر بالفعل ويتم تشغيل التطبيق، سيتم تشغيله بهذه الحدود المحددة.

أمثلة على وضع النافذة الحرة أثناء العمل

يضيف شريط المهام قائمة ابدأ وصينية التطبيقات الحديثة لتكمل وضع النافذة الحرة

في صيف عام 2016، بينما كان Android Nougat لا يزال مجرد معاينة للمطورين، قمت بإصدار تطبيق يسمى شريط المهام يوفر قائمة ابدأ تشبه نظام التشغيل Windows وقائمة التطبيقات الحديثة في تراكب النظام. فهو يسمح للمستخدمين على Nougat بتشغيل التطبيقات في وضع النافذة الحرة - وبما أن شريط المهام يستخدم تراكبًا، فيمكنه البقاء على الشاشة في بيئة النافذة ذات الشكل الحر. إن الجمع بين شريط المهام والوضع الحر يمنح أي جهاز يعمل بنظام Android، وخاصة الأجهزة اللوحية، إحساسًا يشبه الكمبيوتر الشخصي.

أنت تستطيع تحميل شريط المهام على جوجل بلاي، أو عرض الكود المصدري نفسك على جيثب. بالإضافة إلى المفاهيم المذكورة في هذه المقالة، أستخدم أيضًا بعض الحيل للحفاظ على بيئة الوضع الحر نشطة حتى في حالة عدم عرض أي نوافذ ذات شكل حر على الشاشة. يمكن للمستخدمين أيضًا تعيين شريط المهام بشكل اختياري كمشغل افتراضي للسماح لأجهزتهم بالتمهيد تلقائيًا إلى بيئة الوضع الحر.

نظرًا لعدم وجود أجهزة يتم شحنها رسميًا مع دعم النوافذ ذات الشكل الحر الذي تم تمكينه من قبل الشركة المصنعة الأصلية (حتى كتابة هذه السطور)، فإنني أوصي بذلك استخدام شريط المهام كأداة للمطورين لاختبار تطبيقاتهم في بيئة النافذة الحرة على الأجهزة التي لا تدعم ذلك هو - هي.

بالإضافة إلى شريط المهام، قمت أيضًا بتعديل كود مصدر Launcher3 من AOSP للسماح له بتشغيل التطبيقات في الوضع الحر. يعد هذا استنساخًا مباشرًا لمشغل Android 7.1.1، مع الحد الأدنى من التعديلات اللازمة للسماح له بتشغيل التطبيقات ذات الشكل الحر. لقد قدمت هذا المشغل المعدل على أمل أن يقوم المطورون الآخرون بتنفيذ الدعم لإطلاق النوافذ ذات الشكل الحر في مشغلاتهم المخصصة. أنت تستطيع عرض الكود المصدري على جيثب، أو قم بتنزيل نموذج APK.

آمل أن يتمكن مطورو المشغلات المخصصة من الاستفادة من هذا الرمز وتمكين الدعم لإطلاق الشكل الحر تطبيقات النوافذ لأولئك المستخدمين الذين يرغبون في قدر أكبر من المرونة لإدارة النوافذ على شاشاتهم الكبيرة الأجهزة.