توسّع الشاشات المتصلة تجربة العرض في نافذة لتشمل الهواتف العادية، ما يتيح للمستخدمين الوصول إلى الشاشات الكبيرة من أجهزتهم الجوّالة. تتيح هذه الإمكانية فرصًا جديدة للتفاعل مع التطبيقات وزيادة إنتاجية المستخدمين.
تنطبق جميع الميزات الفريدة للعرض في نافذة على الشاشات المتصلة. عند توصيل هاتف بشاشة عرض، تظل حالة الهاتف بدون تغيير، ويبدأ تشغيل جلسة سطح مكتب فارغة على شاشة العرض المتصلة. يعمل الجهاز والشاشة كنظامَين منفصلَين، مع تطبيقات خاصة بكل شاشة.
إذا وصّلت جهازًا مزوّدًا بميزة "العرض في نافذة"، مثل جهاز لوحي، بشاشة خارجية، سيتم توسيع جلسة سطح المكتب لتشمل كلتا الشاشتَين. وبعد ذلك، تعمل الشاشتان كنظام واحد متواصل. يتيح هذا الإعداد إمكانية نقل النوافذ والمحتوى والمؤشر بحرية بين الشاشتَين.
يتطلّب توفير الدعم لشاشات العرض المتصلة بشكل فعّال الاهتمام بعدة جوانب من تصميم تطبيقك وتنفيذه. تضمن أفضل الممارسات التالية تجربة مستخدم سلسة وفعّالة.
التعامل مع تغييرات العرض الديناميكية
يتم إنشاء العديد من التطبيقات على افتراض أنّ العنصر Display وخصائصه لن تتغير أثناء دورة حياة التطبيق. ومع ذلك، عندما يربط المستخدم شاشة خارجية أو يزيل ربطها، أو حتى ينقل نافذة تطبيق بين الشاشات، يمكن أن يتغيّر العنصر Display الأساسي المرتبط بسياق تطبيقك أو نافذته. ويمكن أن تختلف خصائص الشاشة، مثل الحجم ودرجة الدقة ومعدّل التحديث وإمكانية عرض المحتوى بنطاق عالي الديناميكية والكثافة. إذا كنت ترمّز القيم بشكل ثابت استنادًا إلى شاشة الهاتف، من المحتمل أن تتعطّل تنسيقاتك على شاشة خارجية.
يمكن أن تختلف كثافة البكسل في شاشات العرض الخارجية بشكل كبير أيضًا. عليك التأكّد من أنّ تطبيقك يستجيب بشكلٍ صحيح لتغييرات الكثافة. ويشمل ذلك استخدام وحدات البكسل المستقلة الكثافة (dp) للتصميمات، وتوفير موارد خاصة بالكثافة، وضمان تغيير حجم واجهة المستخدم بشكل مناسب.
إذا كان هناك نشاط قيد التشغيل على شاشة خارجية عند فصلها، ينقل النظام النشاط إلى الشاشة الأساسية. يؤدي الانتقال إلى تشغيل تغييرات في الإعدادات، مثل تغيير حجم الشاشة وكثافتها، ما قد يؤدي إلى إعادة إنشاء النشاط. يجب أن يتعامل تطبيقك مع تغييرات الضبط من خلال حفظ حالة واجهة المستخدم واستعادتها لمنع فقدان البيانات أو حدوث تجربة مستخدم مربكة.
استخدام السياق المناسب
يُعدّ استخدام السياق المناسب أمرًا بالغ الأهمية في البيئات التي تتضمّن شاشات متعدّدة. عند الوصول إلى الموارد، يختلف سياق النشاط (الذي يتم عرضه) عن سياق التطبيق (الذي لا يتم عرضه).
يحتوي سياق النشاط على معلومات حول العرض ويتم تعديله دائمًا ليناسب مساحة العرض التي يظهر فيها النشاط. يتيح لك ذلك الحصول على المعلومات الصحيحة حول كثافة العرض أو مقاييس النافذة لتطبيقك. استخدِم دائمًا سياق النشاط (أو سياقًا آخر مستندًا إلى واجهة المستخدم) للحصول على معلومات حول النافذة أو الشاشة الحالية. ويؤثّر ذلك أيضًا في بعض واجهات برمجة التطبيقات الخاصة بالنظام التي تستخدم معلومات من السياق.
في Jetpack Compose، يمكنك الوصول إلى معلومات خاصة بالشاشة باستخدام عناصر CompositionLocal، مثل LocalConfiguration.current وLocalDensity.current. عندما ينتقل نشاط أو نافذة بين شاشات العرض، تتغيّر إعدادات الجهاز، ما يؤدي إلى إعادة التركيب باستخدام مقاييس شاشة عرض جديدة. تتيح عناصر CompositionLocal لواجهة المستخدم التكيّف بسلاسة.
الحصول على معلومات الشاشة
يمكنك استخدام الفئة Display للحصول على معلومات مثل حجم الشاشة أو الكثافة أو العلامات. استخدِم خدمة تابعة لنظام التشغيل DisplayManager للحصول على شاشات العرض المتاحة. لتحديد الشاشات الخارجية، استبعِد
Display.DEFAULT_DISPLAY، وهي عادةً شاشة الهاتف أو الجهاز اللوحي المضمّنة:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays = displayManager.getDisplays() // The default display is 0. External displays have other IDs. val externalDisplays = displays.filter { it.displayId != Display.DEFAULT_DISPLAY }
إدارة تشغيل الأنشطة وإعدادها
باستخدام الشاشات المتصلة، يمكن للتطبيقات تحديد الشاشة التي يجب تشغيل التطبيق عليها عند إطلاقه أو عند إنشاء نشاط آخر. يعتمد هذا السلوك على وضع بدء النشاط المحدّد في ملف البيان وعلى علامات intent وخياراتها التي يضبطها الكيان الذي يشغّل النشاط.
عند نقل نشاط إلى شاشة عرض ثانوية، قد يواجه تطبيقك تغييرًا في السياق وتغييرًا في حجم النافذة وتغييرات في الإعدادات والموارد. إذا كان النشاط يتعامل مع تغيير الإعدادات، يتم إعلامه في onConfigurationChanged(). بخلاف ذلك، تتم إعادة تشغيل النشاط.
إذا كان وضع بدء النشاط المحدّد لأحد الأنشطة يسمح بإنشاء مثيلات متعددة، يمكن أن يؤدي التشغيل على شاشة ثانوية إلى إنشاء مثيل جديد للنشاط. ويتم استئناف النشاطَين في الوقت نفسه، ما قد يكون مفيدًا في بعض سيناريوهات تنفيذ عدة مهام في الوقت نفسه.
يمكنك بدء نشاط على شاشة معيّنة باستخدام ActivityOptions.
يُرجى العِلم أنّ launchDisplayId يتطلّب الإصدار 8 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.
// Get DisplayManager and find the first external display. val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val externalDisplayId = displayManager.displays .firstOrNull { it.displayId != Display.DEFAULT_DISPLAY } ?.displayId // If an external display is found, launch the activity on it. if (externalDisplayId != null) { val intent = Intent(this, MySecondaryActivity::class.java) val options = ActivityOptions.makeBasic() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { options.launchDisplayId = externalDisplayId } startActivity(intent, options.toBundle()) } else { // Optionally, handle the case where no external display is connected. }
تجنُّب قوائم الأجهزة المسموح بها
في بعض الأحيان، تحصر التطبيقات واجهة المستخدم والميزات المخصّصة للشاشات الكبيرة على أجهزة محدّدة من خلال قائمة الأجهزة المسموح بها أو عن طريق التحقّق من BUILD.MODEL وحجم الشاشة المدمج.
لا يكون هذا النهج فعّالاً مع شاشات العرض المتصلة لأنّه يمكن توصيل أي جهاز تقريبًا بشاشة كبيرة، ولا يتغيّر طراز الجهاز عند توصيل شاشة عرض خارجية.
بدلاً من استخدام قوائم السماح أو التحقّق من BUILD.MODEL وحجم العرض المضمّن، تحقَّق من مقاييس النافذة أو إمكانات الجهاز في وقت التشغيل لاتّخاذ قرارات بشأن واجهة المستخدم. استخدِم واجهات برمجة التطبيقات Jetpack WindowManager أو فئات أحجام النوافذ لإنشاء تصاميم متجاوبة وتكيُّفية لمختلف أحجام الشاشات وكثافاتها.
استخدام الأجهزة الطرفية الخارجية
عندما يربط المستخدمون أجهزتهم بشاشة عرض خارجية، غالبًا ما ينشئون بيئة شبيهة بتلك التي توفّرها أجهزة الكمبيوتر المكتبي. ويشمل ذلك غالبًا استخدام لوحات مفاتيح وفئران ولوحات تتبُّع وكاميرات ويب وميكروفونات ومكبرات صوت خارجية. عليك التأكّد من أنّ تطبيقك يعمل بسلاسة مع هذه الأجهزة الطرفية. ويشمل ذلك التعامل مع اختصارات لوحة المفاتيح وإدارة تفاعلات مؤشر الماوس وتوفير الدعم بشكل صحيح للكاميرات أو الميكروفونات الخارجية والالتزام بتوجيه مصدر إخراج الصوت. لمزيد من التفاصيل، يُرجى الاطّلاع على توافق الإدخال على الشاشات الكبيرة.
تحسين إنتاجية المستخدمين
توفّر الشاشات المتصلة فرصة كبيرة لتحسين إنتاجية المستخدم. تتوفّر لديك الآن الأدوات اللازمة لإنشاء تطبيقات للأجهزة الجوّالة يمكنها تقديم تجارب مماثلة لتطبيقات الكمبيوتر. ننصحك بتنفيذ الميزات التالية لتعزيز إنتاجية المستخدمين:
- السماح للمستخدمين بفتح عدة مثيلات من التطبيق نفسه، ما يمثّل ميزة قيّمة لإنجاز مهام مثل مقارنة المستندات أو إدارة محادثات مختلفة أو عرض ملفات متعددة في الوقت نفسه
- يمكنك السماح للمستخدمين بمشاركة بيانات غنية داخل تطبيقك وخارجه باستخدام ميزة السحب والإفلات.
- يمكنك مساعدة المستخدمين في الحفاظ على سير عملهم عند إجراء تغييرات في الإعدادات من خلال تنفيذ نظام قوي لإدارة الحالة.
باتّباع هذه الإرشادات والاستفادة من أمثلة الرموز البرمجية المقدَّمة، يمكنك إنشاء تطبيقات تتكيّف بسلاسة مع شاشات العرض المتصلة، ما يوفّر للمستخدمين تجربة أكثر ثراءً وإنتاجية.