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 baik dengan layanan aksesibilitas seperti Talkback dan Tombol Akses.

Pertimbangkan beberapa masalah berikut yang mungkin terjadi saat Talkback diaktifkan:

  • 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, bahkan jika kode menanganinya.

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

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

Peristiwa D-pad digunakan oleh layanan aksesibilitas

Akar masalah ini adalah peristiwa tombol digunakan oleh layanan aksesibilitas.

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

Seperti yang diilustrasikan dalam gambar 1, saat Talkback diaktifkan, peristiwa D-pad tidak akan 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 menandainya.

Layanan aksesibilitas lainnya juga terpengaruh: Peristiwa D-pad mungkin juga 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 mengimplementasikan AccessibilityNodeInfo agar aplikasi dapat meneruskan peristiwa tombol dengan benar.

Mengekspos informasi ke layanan aksesibilitas

Untuk memberikan layanan aksesibilitas dengan informasi yang memadai tentang lokasi dan deskripsi tampilan kustom, implementasikan AccessibilityNodeInfo untuk menampilkan detail setiap komponen. Untuk menentukan hubungan logis tampilan sehingga layanan aksesibilitas dapat mengelola fokus, implementasikan 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 detail selengkapnya, tonton Google I/O 2013 - Enable Blind and Low-Vision Accessibility 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.