وعلى الرغم من أنّ العديد من تطبيقات Android TV مصمَّمة باستخدام مكوّنات Android الأصلية، فإنّها من المهم أيضًا مراعاة إمكانية وصول الأطراف الثالثة أطر العمل أو المكونات، خاصة عند استخدام طرق العرض المخصصة.
قد لا تعمل مكوّنات العرض المخصّص التي تتفاعل مباشرةً مع OpenGL أو Canvas بشكل جيد. مع خدمات إمكانية الوصول مثل TalkBack والوصول عبر مفتاح التحويل.
يُرجى مراعاة بعض المشاكل التالية التي قد تحدث عند تبديل TalkBack. عَلَى:
- قد يختفي تركيز تسهيل الاستخدام (مستطيل أخضر) في تطبيقك.
- قد يحدد تركيز تسهيل الاستخدام حدود الشاشة بأكملها.
- قد لا يكون تركيز تسهيل الاستخدام قابلاً للنقل.
- قد لا يكون لمفاتيح الاتجاهات الأربعة في لوحة التحكّم أي تأثير، حتى إذا كان الرمز يتعامل معها.
إذا لاحظت أيًا من هذه المشاكل في تطبيقك، تأكَّد من أنّ
يعرض التطبيق AccessibilityNodeInfo
الخاص به
خدمات الوصول بسهولة.
يقدِّم الجزء المتبقّي من هذا الدليل بعض الحلول وأفضل الممارسات لمعالجة هذه المشاكل.
تستخدم خدمات تسهيل الاستخدام أحداث لوحة التحكّم
السبب الجذري لهذه المشكلة هو أنّ المستخدمين يستهلكون الأحداث الرئيسية.
كما هو موضح في الشكل 1، عند تشغيل TalkBack، فإن أحداث لوحة التحكّم لا يتم تمريرها إلى معالج لوحة التحكّم الذي يحدّده المطوّر. بدلاً من ذلك، تتلقى خدمات إمكانية الوصول الأحداث الرئيسية حتى تتمكن من نقل تركيز سهولة الوصول. وذلك لأنّ مكوّنات Android المخصّصة لا تعرض تلقائيًا معلومات لخدمات تسهيل الاستخدام حول موضعها على الشاشة لا يمكن لخدمات تسهيل الاستخدام نقل تركيز إمكانية الوصول لتمييزها.
تتأثر خدمات إمكانية الوصول الأخرى بالمثل: قد تتأثر أحداث لوحة التحكّم يتم استهلاكها عند استخدام ميزة "الوصول عبر مفتاح تحكّم"
لأنّ أحداث لوحة التحكّم يتم إرسالها إلى خدمات تسهيل الاستخدام
تلك الخدمة لا تعرف مكان مكونات واجهة المستخدم في طريقة العرض المخصصة،
يجب تنفيذ AccessibilityNodeInfo
لتطبيقك لإعادة توجيه
الأحداث الرئيسية بشكل صحيح
عرض معلومات لخدمات تسهيل الاستخدام
لتوفير خدمات إمكانية الوصول بمعلومات كافية حول
الموقع الجغرافي ووصف طرق العرض المخصّصة، يمكنك تنفيذ AccessibilityNodeInfo
لكشف تفاصيل كل مكون.
تحديد العلاقة المنطقية بين وجهات النظر بحيث يمكن لخدمات إمكانية الوصول
إدارة التركيز، تنفيذ ExploreByTouchHelper
وتعيينه باستخدام
ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat)
لطرق العرض المخصّصة
عند تنفيذ الدالة ExploreByTouchHelper
، يمكنك إلغاء الطرق التجريدية الأربعة الخاصة بها:
Kotlin
// Return the virtual view ID whose view is covered by the input point (x, y). protected fun getVirtualViewAt(x: Float, y: Float): Int // Fill the virtual view ID list into the input parameter virtualViewIds. protected fun getVisibleVirtualViews(virtualViewIds: List<Int>) // For the view whose virtualViewId is the input virtualViewId, populate the // accessibility node information into the AccessibilityNodeInfoCompat parameter. protected fun onPopulateNodeForVirtualView(virtualViewId: Int, @NonNull node: AccessibilityNodeInfoCompat) // Set the accessibility handling when perform action. protected fun onPerformActionForVirtualView(virtualViewId: Int, action: Int, @Nullable arguments: Bundle): Boolean
Java
// Return the virtual view ID whose view is covered by the input point (x, y). protected int getVirtualViewAt(float x, float y) // Fill the virtual view ID list into the input parameter virtualViewIds. protected void getVisibleVirtualViews(List<Integer> virtualViewIds) // For the view whose virtualViewId is the input virtualViewId, populate the // accessibility node information into the AccessibilityNodeInfoCompat parameter. protected void onPopulateNodeForVirtualView(int virtualViewId, @NonNull AccessibilityNodeInfoCompat node) // Set the accessibility handling when perform action. protected boolean onPerformActionForVirtualView(int virtualViewId, int action, @Nullable Bundle arguments)
لمزيد من التفاصيل، يُرجى مشاهدة مؤتمر Google I/O 2013 - تمكين المكفوفين وضعاف النظر أدوات تسهيل الاستخدام على Android أو يمكنك قراءة المزيد حول تعبئة أحداث تسهيل الاستخدام.
أفضل الممارسات
البيانات المطلوبة:
AccessibilityNodeInfo.getBoundsInScreen()
يجب أن يحدد موضع المكون.البيانات المطلوبة:
AccessibilityNodeInfo.setVisibleToUser()
يجب أن يعكس مستوى رؤية المكوِّن.البيانات المطلوبة:
AccessibilityNodeInfo.getContentDescription()
يجب أن يحدد وصف المحتوى لـ Talkback للإعلان عنه.تحديد
AccessibilityNodeInfo.setClassName()
بحيث تتمكن الخدمات من التمييز بين نوع المكوِّن.عند تنفيذ
performAction()
، يعكس الإجراء باستخدامAccessibilityEvent
مقابل.لتنفيذ المزيد من أنواع الإجراءات، مثل
ACTION_CLICK
، عليك استدعاءAccessibilityNodeInfo.addAction(ACTION_CLICK)
باستخدام المنطق المقابل فيperformAction()
.تعكس، عند الاقتضاء، حالة المكوِّن لـ
setFocusable()
،setClickable()
،setScrollable()
، وطرق مماثلة.مراجعة مستندات
AccessibilityNodeInfo
لتحديد الطرق الأخرى التي يمكن من خلالها لخدمات تسهيل الاستخدام التفاعل بشكل أفضل مع المكونات.
عيّنة
يمكنك الرجوع إلى نموذج إمكانية الوصول إلى العرض المخصّص في Android TV للاطلاع على أفضل ممارسات إضافة دعم إمكانية الوصول إلى التطبيقات باستخدام طرق العرض المخصصة.