Dukungan aksesibilitas tampilan kustom di Android TV

Meskipun banyak aplikasi Android TV dibuat dengan komponen Android native, juga penting untuk mempertimbangkan aksesibilitas aplikasi pihak ketiga framework atau komponen, terutama saat menggunakan tampilan kustom.

Komponen tampilan kustom yang berinteraksi langsung dengan OpenGL atau Canvas mungkin tidak berfungsi dengan baik dengan layanan aksesibilitas seperti TalkBack dan Tombol Akses.

Pertimbangkan beberapa masalah berikut yang mungkin terjadi saat TalkBack diaktifkan pada:

  • Fokus aksesibilitas (kotak hijau) mungkin hilang di aplikasi Anda.
  • Fokus aksesibilitas mungkin memilih batas seluruh layar.
  • Fokus aksesibilitas mungkin tidak dapat dipindahkan.
  • Tombol empat arah pada D-pad mungkin tidak berpengaruh, meskipun kode Anda menanganinya.

Jika Anda melihat salah satu masalah ini di aplikasi, periksa apakah aplikasi mengekspos AccessibilityNodeInfo-nya ke layanan aksesibilitas.

Bagian selanjutnya dari panduan ini memberikan beberapa solusi dan praktik terbaik untuk mengatasi masalah tersebut.

Peristiwa D-pad digunakan oleh layanan aksesibilitas

Akar masalah ini adalah peristiwa tombol digunakan oleh aksesibilitas layanan IT perusahaan mereka.

Pemakaian peristiwa Dpad Gambar 1. Diagram yang menggambarkan cara sistem berfungsi dengan Talkback aktif dan nonaktif.

Seperti yang diilustrasikan dalam gambar 1, saat Talkback diaktifkan, peristiwa D-pad tidak diteruskan ke pengendali D-pad yang ditentukan oleh developer. Sebagai gantinya, layanan aksesibilitas menerima peristiwa utama sehingga mereka dapat memindahkan fokus aksesibilitas. Karena komponen Android kustom tidak secara default mengekspos informasi ke layanan aksesibilitas tentang posisinya di layar, layanan aksesibilitas tidak dapat memindahkan fokus aksesibilitas untuk menyorotnya.

Layanan aksesibilitas lainnya juga terpengaruh: Peristiwa D-pad mungkin juga yang dikonsumsi saat menggunakan Tombol Akses.

Karena peristiwa D-pad dikirimkan ke layanan aksesibilitas, dan layanan itu tidak tahu di mana komponen UI berada dalam tampilan khusus, Anda harus menerapkan AccessibilityNodeInfo untuk aplikasi Anda guna meneruskan peristiwa utama dengan benar.

Mengekspos informasi ke layanan aksesibilitas

Untuk memberikan layanan aksesibilitas dengan informasi yang memadai tentang lokasi dan deskripsi tampilan kustom, terapkan AccessibilityNodeInfo untuk mengekspos detail setiap komponen. Untuk mendefinisikan hubungan logis tampilan sehingga layanan aksesibilitas dapat mengelola fokus, menerapkan ExploreByTouchHelper dan menyetelnya menggunakan ViewCompat.setAccessibilityDelegate(View, AccessibilityDelegateCompat) untuk tampilan kustom.

Saat mengimplementasikan ExploreByTouchHelper, ganti keempat metode abstraknya:

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)

Untuk detail selengkapnya, tonton Google I/O 2013 -enabling Blind and Low-Vision Aksesibilitas di Android atau baca selengkapnya tentang mengisi peristiwa aksesibilitas.

Praktik terbaik

Contoh

Lihat contoh aksesibilitas tampilan kustom untuk Android TV guna melihat praktik terbaik untuk menambahkan dukungan aksesibilitas ke aplikasi menggunakan tampilan kustom.