توفّر أجهزة التلفزيون مجموعة محدودة من عناصر التحكّم في التنقّل للتطبيقات. يعتمد إنشاء نظام تنقّل فعّال لتطبيق بث تلفزيوني على فهم عناصر التحكّم المحدودة هذه، بالإضافة إلى القيود التي يواجهها المستخدمون أثناء تشغيل تطبيقك. وعند إنشاء تطبيق Android للتلفزيون، يجب الانتباه بشكل خاص إلى كيفية تنقّل المستخدم عند استخدام أزرار جهاز التحكّم عن بُعد بدلاً من شاشة اللمس.
المبادئ
والهدف هو أن تبدو عملية التنقّل طبيعية ومألوفة بدون أن تطغى على واجهة المستخدم أو تصرف الانتباه عن المحتوى. تساعد المبادئ التالية في وضع أساس لتجربة مستخدم متسقة وسهلة الاستخدام في جميع تطبيقات التلفزيون.
تسهيل الوصول إلى المحتوى يريد المستخدمون الوصول إلى المحتوى بسرعة وبأقل عدد ممكن من النقرات. نظِّم معلوماتك بطريقة تتطلّب أقل عدد ممكن من الشاشات.
اتّبِع أفضل الممارسات والاقتراحات لجعل التنقّل متوقّعًا للمستخدمين. لا تعِد تصميم أنماط التنقّل بدون داعٍ، لأنّ ذلك يؤدي إلى حدوث التباس وعدم القدرة على التنبؤ.
تبسيط التنقّل بما يكفي لتوفير تجربة سلسة تتوافق مع سلوكيات المستخدمين الشائعة لا تفرط في التعقيد من خلال إضافة طبقات غير ضرورية من التنقّل.
وحدات التحكُّم
تتوفّر وحدات التحكّم بأشكال متنوعة، بدءًا من جهاز تحكّم عن بُعد بسيط وصولاً إلى وحدات تحكّم معقّدة في الألعاب. تتضمّن جميع وحدات التحكّم لوحة توجيه (D-pad) بالإضافة إلى أزرار الاختيار والشاشة الرئيسية والرجوع. تختلف الأزرار الأخرى حسب الطراز.
لوحة التحكّم
تتمثل طريقة التنقّل الأساسية على التلفزيون في استخدام لوحة التحكّم التي تتضمّن أزرارًا للأعلى والأسفل واليمين واليسار. تنقل لوحة التحكّم الاتجاهية التركيز من عنصر إلى أقرب عنصر في اتجاه الزر الذي تم الضغط عليه.
زر الاختيار
يختار العنصر الذي تم التركيز عليه على الشاشة.
زرّ الشاشة الرئيسية
ينقل المستخدم إلى الشاشة الرئيسية للنظام.
زر الرجوع
يوفّر للمستخدمين طريقة للرجوع إلى العرض السابق.
زر الميكروفون
يستدعي إما "مساعد Google" أو ميزة الإدخال الصوتي.
التنقّل باستخدام لوحة التحكّم
على جهاز تلفزيون، يتنقّل المستخدمون باستخدام لوحة التحكّم الاتجاهية أو مفاتيح الأسهم. يقتصر هذا النوع من عناصر التحكّم على الحركة للأعلى وللأسفل ولليمين ولليسار. لإنشاء تطبيق رائع محسّن للتلفزيون، عليك توفير نظام تنقّل يتيح للمستخدم التعرّف بسرعة على كيفية التنقّل في تطبيقك باستخدام عناصر التحكّم المحدودة هذه.
يتعامل إطار عمل Android مع التنقّل الاتجاهي بين عناصر التصميم تلقائيًا، لذا لن تحتاج عادةً إلى اتّخاذ أي إجراءات إضافية لتطبيقك، ولكن عليك اختبار التنقّل باستخدام وحدة التحكّم ذات لوحة الاتجاهات بدقة لاكتشاف أي مشاكل في التنقّل.
اتّبِع الإرشادات التالية لاختبار ما إذا كان نظام التنقّل في تطبيقك يعمل بشكل جيد مع لوحة مفاتيح الاتجاهات على جهاز تلفزيون:
- تأكَّد من أنّ المستخدم الذي لديه وحدة تحكّم مزوّدة بلوحة مفاتيح اتجاهات يمكنه الانتقال إلى جميع عناصر التحكّم المرئية على الشاشة.
- عند تصفّح القوائم باستخدام التركيز، تأكَّد من أنّ أزرار لوحة التحكّم الاتجاهية للأعلى وللأسفل تصفّح القائمة وأنّ زر الاختيار يحدّد عنصرًا في القائمة. تأكَّد من أنّ المستخدمين يمكنهم اختيار عنصر في القائمة وأنّ القائمة تظل قابلة للتمرير عند اختيار عنصر.
- تأكَّد من أنّ التبديل بين عناصر التحكّم سهل ويمكن توقّعه.
تعديل التنقّل الاتجاهي
يطبِّق إطار عمل Android تلقائيًا نظام تنقّل اتجاهي استنادًا إلى الموضع النسبي للعناصر القابلة للتركيز في تصميماتك. اختبِر نظام التنقّل الذي تم إنشاؤه في تطبيقك باستخدام وحدة تحكّم مزوّدة بلوحة مفاتيح رباعية الاتجاهات. بعد الاختبار، إذا قرّرت أنك تريد أن يتنقّل المستخدمون بين التصاميم بطريقة معيّنة، يمكنك إعداد تنقّل اتجاهي واضح لعناصر التحكّم.
يوضّح عينة التعليمات البرمجية التالية كيفية تحديد عنصر التحكّم التالي الذي سيتم التركيز عليه لكائن تصميم TextView:
<TextView android:id="@+id/Category1" android:nextFocusDown="@+id/Category2" />
يسرد الجدول التالي جميع سمات التنقّل المتاحة لعناصر واجهة مستخدم Android:
| السمة | الوظيفة |
|---|---|
nextFocusDown |
تحدّد هذه السمة طريقة العرض التالية التي سيتم التركيز عليها عندما يتنقّل المستخدم إلى الأسفل. |
nextFocusLeft |
تحدّد هذه السمة طريقة العرض التالية التي سيتم التركيز عليها عندما يتنقّل المستخدم إلى اليمين. |
nextFocusRight |
تحدّد هذه السمة طريقة العرض التالية التي سيتم التركيز عليها عندما يتنقّل المستخدم إلى اليمين. |
nextFocusUp |
تحدّد هذه السمة طريقة العرض التالية التي سيتم التركيز عليها عندما يتنقّل المستخدم للأعلى. |
لاستخدام إحدى سمات التنقّل الواضح هذه، اضبط القيمة على
android:id لعنصر واجهة مستخدم آخر في التصميم. احرص على ضبط ترتيب التنقّل على شكل حلقة، بحيث يعيد عنصر التحكّم الأخير التركيز إلى عنصر التحكّم الأول.
توفير تركيز واختيار واضحَين
يعتمد نجاح نظام التنقّل في التطبيق على أجهزة التلفزيون على ما إذا كان بإمكان المستخدم تحديد عنصر واجهة المستخدم الذي هو محل التركيز بسرعة. إذا لم توفّر إشارة واضحة إلى العنصر الذي يتم التركيز عليه، وبالتالي العنصر الذي يمكن للمستخدم اتّخاذ إجراء بشأنه، قد يشعر المستخدم بالإحباط سريعًا ويخرج من تطبيقك. وللسبب نفسه، من المهم دائمًا أن يكون هناك عنصر مركّز عليه يمكن للمستخدم اتّخاذ إجراء بشأنه فور بدء تشغيل تطبيقك أو في أي وقت يكون فيه التطبيق غير نشط.
في تصميم تطبيقك وتنفيذه، استخدِم اللون أو الحجم أو الرسوم المتحركة أو مزيجًا من هذه السمات لمساعدة المستخدمين في تحديد الإجراءات التي يمكنهم اتّخاذها بعد ذلك. استخدِم نظامًا موحّدًا للإشارة إلى التركيز في جميع أنحاء تطبيقك.
يوفر نظام التشغيل Android موارد قائمة حالات قابلة للرسم لتنفيذ التمييز لعناصر التحكّم المحدّدة والمركّز عليها. يوضّح مثال الرمز البرمجي التالي كيفية تفعيل السلوك المرئي لزر للإشارة إلى أنّ المستخدم انتقل إلى عنصر التحكّم ثم اختاره:
<!-- res/drawable/button.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/button_pressed" /> <!-- pressed --> <item android:state_focused="true" android:drawable="@drawable/button_focused" /> <!-- focused --> <item android:state_hovered="true" android:drawable="@drawable/button_focused" /> <!-- hovered --> <item android:drawable="@drawable/button_normal" /> <!-- default --> </selector>
ينطبق مقتطف الرمز البرمجي التالي بتنسيق XML على قائمة الحالات السابقة القابلة للرسم على Button:
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/button" />
احرص على توفير مساحة كافية داخل عناصر التحكّم القابلة للتحديد والتركيز عليها، كي تظهر التمييزات حولها بوضوح.
التنقّل باستخدام زر الرجوع
لضمان اتّساق تجربة الاستخدام في جميع التطبيقات على المنصة، احرص على أن يتوافق سلوك زر الرجوع مع الإرشادات التالية.
استخدام سلوك يمكن توقّعه لزر الرجوع
لإنشاء تجربة تنقّل مباشرة ويمكن توقّعها، يجب نقل المستخدم إلى الوجهة السابقة عندما يضغط على زر الرجوع في جهاز التحكّم عن بُعد.
إذا انتقل المستخدم من عنصر قائمة إلى بطاقة في منتصف الصفحة ثم ضغط على زر الرجوع، ستختلف النتيجة حسب ما إذا كان التطبيق يستخدم شريط التنقل العلوي أو شريط التنقل الأيمن:
- يستخدم التطبيق شريط التنقّل العلوي: يمكنك إعادة المستخدم إلى أعلى الصفحة من خلال التمرير سريعًا وتفعيل التركيز على القائمة.
- يستخدم التطبيق التنقّل على يمين الشاشة: فعِّل القائمة الجانبية وركِّز على عنصر القائمة النشط حاليًا.
تأكَّد من أنّ زر الرجوع ليس محميًا بشاشات تأكيد أو جزءًا من حلقة لا نهائية.
لا تفعل ذلك.
تجنُّب حظر الوصول إلى المحتوى عند الخروج السماح للمستخدمين بالخروج من التطبيق بدون تأكيد
لا تفعل ذلك.
لا تُدخِل أبدًا حلقة لا نهائية من إغلاق القائمة وفتحها. من المفترض أن يؤدي الضغط على زر الرجوع إلى الخروج من التطبيق. لا تعرض زر خروج في القائمة إلا في حالات خاصة، مثل ملف الأطفال.
عدم عرض زرّ للأعلى أو للرجوع
على عكس الأجهزة المحمولة، يُستخدم زر الرجوع على جهاز التحكّم عن بُعد للتنقّل إلى الخلف على التلفزيون. ليس من الضروري عرض زر رجوع افتراضي على الشاشة:
لا تفعل ذلك.
عرض زر إلغاء إذا لزم الأمر
إذا كانت الإجراءات المرئية الوحيدة هي إجراءات التأكيد أو الإجراءات المدمرة أو إجراءات الشراء، من الممارسات الجيدة توفير زر إلغاء يعود إلى الوجهة السابقة:
الإجراءات المناسبة
تنفيذ ميزة التنقّل للخلف
يتعامل إطار عمل Android بشكل عام مع التنقّل للخلف بشكل جيد، كما هو الحال مع لوحة التحكّم الاتجاهية. إذا كنت تستخدم مكوّن التنقّل، يمكنك توفير مجموعة متنوعة من الرسومات البيانية للتنقّل. في بعض الأحيان، قد تحتاج إلى تنفيذ بعض السلوكيات المخصّصة، مثل إعادة ضبط التركيز إلى بداية قائمة طويلة عند الضغط على زر الرجوع.
ComponentActivity هي الصنف الأساسي لكل من FragmentActivity وAppCompatActivity، وتتيح لك التحكّم في سلوك زر الرجوع باستخدام OnBackPressedDispatcher الذي يمكنك استرداده من خلال استدعاء getOnBackPressedDispatcher().
لمزيد من المعلومات، يُرجى الاطّلاع على توفير التنقّل للخلف المخصّص.
عناصر التحكّم في التشغيل على التلفزيون
يُعدّ تشغيل الفيديو من أهم الميزات على التلفزيون. من المهم أن تتشابه طريقة عمل مشغّلات الفيديو في التطبيقات على Android TV. يُرجى الرجوع إلى إرشادات عناصر التحكّم في التشغيل على التلفزيون.
التنقّل بين علامات التبويب في البث المباشر
بالإضافة إلى الالتزام بمتطلبات جودة تطبيقات بث تلفزيوني، يجب أن تستوفي التطبيقات التي تتضمّن خلاصة بث تلفزيوني مباشر مدمجة في علامة التبويب "بث مباشر" أيضًا متطلبات التشغيل السلس والرجوع المباشر، كما هو موضّح في الأقسام التالية.
تشغيل سلس
تنطبق ميزة التشغيل السلس على السلوك داخل التطبيق بعد أي رابط عميق لقناة بث مباشر أو قناة خطية من Google TV وAndroid TV.
عندما ينقر مستخدم على رابط لصفحة في التطبيق، تنطبق القواعد التالية:
- عدم حدوث تأخير: يجب توجيه المستخدمين مباشرةً إلى تشغيل القناة بدون حظر أو تأخير الشاشات، مثل عمليات تسجيل الدخول أو الاشتراك أو فيديوهات التعريف بالعلامة التجارية.
- استثناء التشغيل على البارد: إذا بدأ الرابط لصفحة معيّنة تحميل التطبيق المستهدف من عملية تشغيل على البارد، يُسمح بتأخير بدء التشغيل. يُسمح أيضًا في هذه الحالة بعرض فيديوهات أو صور متحركة للعلامة التجارية عند تشغيل التطبيق.
- استثناء بشأن تأخير التحميل: إذا استغرق الانتقال إلى القناة بضع ثوانٍ، يُسمح بعرض العلامة التجارية. يجب أن تكون المدة كافية فقط لتحميل القناة.
إذا تم تسجيل خروج المستخدم أو لم يكن مشتركًا، يمكنك حظر تشغيل المحتوى على قناة مدفوعة لإكمال عملية تسجيل الدخول أو الاشتراك.
Direct-back
عندما يفتح المستخدمون تطبيقًا من رابط لصفحة في التطبيق على علامة التبويب "بث مباشر"، ثم يضغطون على زر الرجوع، يجب أن تتم إعادتهم إلى علامة التبويب "بث مباشر" بضغطة واحدة على زر الرجوع، بغض النظر عن مقدار الوقت المنقضي. يجب توفّر سلوك الرجوع المباشر هذا لجميع الروابط لصفحات معيّنة في علامة التبويب "مباشر" على Google TV وAndroid TV.
تتميّز الروابط لصفحات معيّنة في علامة التبويب "البث المباشر" بمَعلمة رابط عميق مُلحقة:
?exit_on_back=[true|false]. يجب أن تحلّل التطبيقات هذه المَعلمة لتحديد ما إذا تم تشغيل التطبيق من علامة التبويب "البث المباشر". إذا كانت قيمة exit_on_back هي true،
يجب أن تنفّذ التطبيقات سلوك الرجوع المباشر.
يُرجى العِلم أنّه إذا ضغط المستخدم على أي زر آخر غير زر الرجوع كأول زر يضغط عليه بعد الرابط لصفحة في التطبيق، لن ينطبق شرط الرجوع المباشر، وسيكون سلوك زر الرجوع العادي هو المطلوب فقط.
على سبيل المثال، لنفترض أنّ المستخدم بعد اتّباع رابط لصفحة في التطبيق يضغط على زر الاختيار في لوحة التحكّم، ما يؤدي إلى ظهور تراكب عناصر التحكّم. ينتظر المستخدم إلى أن يختفي التراكب، ثم يضغط على زر الرجوع. بما أنّ الزر الأول الذي تم الضغط عليه بعد اتّباع الرابط لصفحة معيّنة كان زر اختيار لوحة التحكّم الاتجاهية، لا ينطبق شرط الرجوع المباشر. بدلاً من ذلك، يتم تطبيق منطق سجلّ الرجوع العادي للتطبيق.
يجب أن تؤدي الضغطات المتكررة على زر الرجوع إلى توجيه المستخدم إلى جذر التطبيق ثم إلى Google TV أو Android TV، بدون أي حلقات لا نهائية. لمزيد من المعلومات، راجِع قسم سلوك زر الرجوع الذي يمكن توقّعه.
بنية التنقّل
تساعد بنية التنقّل المحدّدة جيدًا المستخدمين في معرفة مكان وجودهم في تطبيقك وكيفية الوصول إلى المحتوى المختلف. ضَع في اعتبارك الجوانب التالية عند تصميم التنقّل.
وجهة البدء الثابتة
الشاشة الأولى التي تظهر للمستخدم عند تشغيل التطبيق من مشغّل التطبيقات هي أيضًا الشاشة الأخيرة التي تظهر له عند الرجوع إلى مشغّل التطبيقات بعد الضغط على زر الرجوع.
محاكاة التنقّل اليدوي من خلال الربط بصفحة معيّنة
سواء كان المستخدمون ينتقلون إلى وجهة معيّنة من خلال الربط بصفحة معيّنة أو يدويًا، يمكنهم استخدام زر الرجوع للتنقّل بين الوجهات والعودة إلى الوجهة الأولى.
يحاكي الربط بصفحة معيّنة في تطبيق من تطبيق آخر عملية التنقّل اليدوي. على سبيل المثال، إذا انتقل المستخدم مباشرةً إلى صفحة التفاصيل في تطبيق Moviestar من Google TV ثم ضغط على زر الرجوع، سيتم نقله إلى الصفحة الرئيسية لتطبيق Moviestar.
مسار واضح إلى جميع العناصر القابلة للتركيز
السماح للمستخدمين بالتنقّل في واجهة المستخدم باتّباع توجيهات واضحة إذا لم يكن هناك مسار مباشر للوصول إلى أحد عناصر التحكّم، ننصحك بنقله إلى مكان آخر.
يجب
وضع عناصر التحكّم، مثل إجراء البحث الموضّح هنا، في مواقع جغرافية لا تتداخل
مع العناصر الأخرى القابلة للنقر.
لا تفعل ذلك.
تجنَّب التنسيقات التي تحتوي على عناصر تحكّم في أماكن يصعب الوصول إليها. قد يكون من الصعب الوصول إلى إجراء البحث الموضّح هنا باستخدام لوحة التحكّم الاتجاهية.
المَحاور
صمِّم تخطيطك للاستفادة من المحورَين الأفقي والعمودي. امنح كل اتجاه وظيفة محددة، ما يتيح التنقّل بسرعة في التسلسلات الهرمية الكبيرة.
يجب:
يمكن التنقّل بين الفئات على المحور العمودي، ويمكن تصفّح العناصر ضمن كل فئة على المحور الأفقي.
لا تفعل ذلك.
تجنَّب التسلسلات الهرمية المعقّدة والمتداخلة للتصميم.