תמיכה בנושא נגישות של תצוגה בהתאמה אישית ב-Android TV

אפליקציות רבות ל-Android TV מבוססות על רכיבי Android מקוריים, אבל חשוב גם לקחת בחשבון את הנגישות של צדדים שלישיים פריימים או רכיבים, במיוחד כשמשתמשים בתצוגות מותאמות אישית.

יכול להיות שרכיבי תצוגה מותאמת אישית שממשקים ישירות עם OpenGL או עם Canvas לא יפעלו כמו שצריך עם שירותי נגישות כמו Talkback ו'גישה באמצעות מתג'.

כדאי לשקול כמה מהבעיות הבאות שעשויות להתרחש לאחר החלפת TalkBack ב:

  • מיקוד הנגישות (מלבן ירוק) עשוי להיעלם באפליקציה.
  • יכול להיות שמיקוד הנגישות יבחר את התחום של כל המסך.
  • ייתכן שלא ניתן להזיז את מיקוד הנגישות.
  • יכול להיות שארבעת מקשי הכיוון בלחצני החיצים לא ישפיעו על, גם אם הקוד מטפל בהם.

אם הבחנתם באחת מהבעיות האלה באפליקציה, צריך לבדוק האפליקציה חושפת את AccessibilityNodeInfo שלה עץ לשירותי הנגישות.

המשך המדריך הזה מספק כמה פתרונות ושיטות מומלצות לטיפול בבעיות האלה.

שירותי נגישות צורכים אירועים בלחצני החיצים (D-pad)

הסיבה לבעיה הזו היא שהאירועים המרכזיים נצרכים על ידי הנגישות. שירותים שונים.

צריכה של אירועי Dpad איור 1. תרשימים שמתארים את אופן הפעולה של המערכת, גם אם מפעילים ומשביתים את TalkBack.

כפי שמתואר באיור 1, כש-TalkBack מופעל, אירועי D-pad לא מועברות ל-handler של לחצני החיצים (D-pad) שהוגדר על ידי המפתח. במקום זאת, שירותי הנגישות מקבלים את האירועים המרכזיים, כך שהם יכולים להעביר המיקוד בנגישות. כי רכיבי Android בהתאמה אישית לא חושפים כברירת מחדל שירותי נגישות לגבי המיקום שלהם במסך, שירותי הנגישות לא יכולים להעביר את מיקוד הנגישות כדי להדגיש אותם.

שירותי נגישות אחרים מושפעים באופן דומה: גם אירועים בלחצני החיצים (D-pad) נצרכים כשמשתמשים ב'גישה באמצעות מתג'.

כי אירועי מקשי החיצים נשלחים לשירותי הנגישות, וגם השירות לא יודע איפה נמצאים רכיבי ממשק המשתמש בתצוגה מותאמת אישית, עליך להטמיע את 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 - Enable Blind and Low-Vision נגישות ב-Android או לקרוא מידע נוסף על אכלוס אירועי נגישות.

שיטות מומלצות

דוגמה

כדאי לעיין בדוגמה לנגישות בתצוגה מותאמת אישית ל-Android TV כדי לראות שיטות מומלצות הוספת תמיכה בנגישות לאפליקציות באמצעות תצוגות בהתאמה אישית.