تتيح ميزة "الشاشات المتصلة" تجربة العرض في نافذة على الهواتف العادية، ما يتيح للمستخدمين الوصول إلى شاشات كبيرة من أجهزتهم الجوّالة. تفتح هذه الإمكانية آفاقًا جديدة للتفاعل مع التطبيقات وزيادة إنتاجية المستخدمين.
تنطبق جميع الميزات الفريدة لميزة "العرض في نافذة" على الشاشات المتصلة. عند توصيل هاتف بشاشة، تظل حالة الهاتف بدون تغيير، وتبدأ جلسة سطح مكتب فارغة على الشاشة المتصلة. يعمل الجهاز والشاشة كنظامين فرديين، مع تطبيقات خاصة بكل شاشة.
إذا وصّلت جهازًا يتضمّن ميزة "العرض في نافذة"، مثل جهاز لوحي، بشاشة خارجية، فستمتد جلسة سطح المكتب على كلتا الشاشتين. بعد ذلك، تعمل الشاشتان كنظام واحد مستمر. يتيح هذا الإعداد للنوافذ والمحتوى والمؤشر التنقّل بحرية بين الشاشتين.
يتطلّب توفير الدعم للشاشات المتصلة بفعالية الانتباه إلى عدة جوانب في تصميم تطبيقك وتنفيذه. تضمن أفضل الممارسات التالية تجربة مستخدم سلسة ومثمرة.
التعامل مع التغييرات الديناميكية في العرض
يتم إنشاء العديد من التطبيقات على افتراض أنّ العنصر 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 }
إدارة إطلاق النشاط وإعداده
من خلال الشاشات المتصلة، يمكن للتطبيقات تحديد الشاشة التي يجب تشغيل التطبيق عليها عند تشغيله أو عند إنشاء نشاط آخر. يعتمد هذا السلوك على وضع بدء النشاط المحدّد في ملف البيان وعلى علامات النية والخيارات التي يضبطها الكيان الذي يبدأ النشاط.
عندما ينتقل نشاط إلى شاشة ثانوية، قد يتلقّى تطبيقك تحديثًا للسياق وتغييرًا في حجم النافذة وتغييرات في الإعدادات والموارد. إذا كان النشاط
يتعامل مع تغيير الإعدادات، يتم إرسال إشعار بذلك في
onConfigurationChanged(). وإلا، فستتم إعادة تشغيل النشاط.
إذا كان وضع بدء النشاط المحدّد يسمح بإنشاء نُسخ متعددة، فإن بدء النشاط على شاشة ثانوية يمكن أن يؤدي إلى إنشاء نسخة جديدة من النشاط. يتم استئناف كلا النشاطين في الوقت نفسه، وهو ما قد يكون مفيدًا في بعض سيناريوهات تعدد المهام.
يمكنك بدء نشاط على شاشة معيّنة باستخدام ActivityOptions.
يُرجى العِلم أنّ تطبيق "launchDisplayId" يتطلّب الإصدار Android 8 (المستوى 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 أو فئات حجم النافذة لإنشاء تنسيقات متجاوبة وقابلة للتكيّف مع مختلف أحجام الشاشات وكثافتها.
دعم الأجهزة الملحقة الخارجية
عندما يتصل المستخدمون بشاشة خارجية، فإنهم غالبًا ما ينشئون بيئة تشبه سطح المكتب. يتضمن ذلك غالبًا استخدام لوحات المفاتيح الخارجية وأجهزة الماوس ولوحات التتبع وكاميرات الويب والميكروفونات ومكبرات الصوت. عليك التأكّد من أنّ تطبيقك يعمل بسلاسة مع هذه الأجهزة الملحقة. ويشمل ذلك التعامل مع اختصارات لوحة المفاتيح وإدارة تفاعلات مؤشر الماوس ودعم الكاميرات أو الميكروفونات الخارجية بشكل صحيح واحترام توجيه إخراج الصوت. لمزيد من التفاصيل، يُرجى الاطّلاع على توافق الإدخال على الشاشات الكبيرة.
تحسين إنتاجية المستخدمين
توفّر الشاشات المتصلة فرصة كبيرة لتحسين إنتاجية المستخدم. لديك الآن الأدوات اللازمة لإنشاء تطبيقات للأجهزة الجوّالة يمكنها تقديم تجارب مماثلة لتطبيقات الكمبيوتر المكتبي. ننصحك بتنفيذ الميزات التالية لتعزيز إنتاجية المستخدمين:
- يتيح ذلك للمستخدمين فتح نُسخ متعددة من التطبيق نفسه، وهو أمر مفيد جدًا لمهام مثل مقارنة المستندات أو إدارة المحادثات المختلفة أو عرض ملفات متعددة في الوقت نفسه.
- يمكنك السماح للمستخدمين بمشاركة البيانات الوافية داخل تطبيقك وخارجه من خلال ميزة السحب والإفلات.
- ساعِد المستخدمين في الحفاظ على سير عملهم أثناء تغييرات الإعدادات من خلال تنفيذ نظام قوي لإدارة الحالة.
باتّباع هذه الإرشادات واستخدام أمثلة الرموز البرمجية المقدَّمة، يمكنك إنشاء تطبيقات تتوافق بسلاسة مع الشاشات المتصلة، ما يوفّر للمستخدمين تجربة أكثر ثراءً وإنتاجية.