Dukungan aksesibilitas tampilan kustom di Android TV

Meskipun banyak aplikasi Android TV dibuat dengan komponen Android native, penting juga untuk mempertimbangkan aksesibilitas framework atau komponen pihak ketiga, 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 Switch Access.

Pertimbangkan beberapa masalah berikut yang mungkin terjadi saat Talkback diaktifkan:

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

Jika Anda mengamati salah satu masalah ini di aplikasi Anda, pastikan aplikasi Anda mengekspos pohon AccessibilityNodeInfo ke layanan aksesibilitas.

Bagian panduan ini akan memberikan beberapa solusi dan praktik terbaik untuk mengatasi masalah ini.

Peristiwa D-pad digunakan oleh layanan aksesibilitas

Akar penyebab masalah ini adalah peristiwa utama yang digunakan oleh layanan aksesibilitas.

Penggunaan peristiwa Dpad dan Talkback
Gambar 1. Diagram yang menggambarkan cara kerja sistem dengan Talkback aktif dan nonaktif.

Seperti yang diilustrasikan pada 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 dapat memindahkan fokus aksesibilitas. Karena komponen Android kustom secara default tidak mengekspos informasi ke layanan aksesibilitas tentang posisinya di layar, layanan aksesibilitas tidak dapat memindahkan fokus aksesibilitas untuk menyorotnya.

Layanan aksesibilitas lainnya juga terpengaruh dengan cara yang sama: peristiwa D-pad juga dapat digunakan saat menggunakan Tombol Akses.

Karena peristiwa D-pad dikirimkan ke layanan aksesibilitas, dan layanan tersebut tidak mengetahui lokasi komponen UI dalam tampilan kustom, Anda harus menerapkan AccessibilityNodeInfo agar aplikasi Anda dapat meneruskan peristiwa utama dengan benar.

Mengekspos informasi ke layanan aksesibilitas

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

Saat menerapkan ExploreByTouchHelper, ganti empat 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 mengetahui detail selengkapnya, tonton Google I/O 2013 - Mengaktifkan Aksesibilitas untuk Pengguna Tunanetra dan dengan Gangguan Penglihatan di Android atau baca lebih lanjut 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 yang menggunakan tampilan kustom.