Android 無障礙朗讀模式

最近公司的產品要支援無障礙的朗讀模式 (Talk Back),在普通的畫面上製作都還算 OK,到遇到 Dialog 跟 Bottom Sheet 的操作邏輯下,就會有很神奇的朗讀順序。

不知道為什麼在 Dialog 跟 Bottom Sheet 開啟的情況下,整體的朗讀一定會先去唸整個 View 的左上角找到的第一個,找了超久的原因才發現原來 Dialog 的 decorView 也會有無障礙的設定。

所以最後我的解決方式就是在 dialog onCreate 階段將 decorView 的無障礙設定清除。


override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
      val dialog = super.onCreateDialog(savedInstanceState)
      dialog.window?.decorView?.importantForAccessibility = 
        View.IMPORTANT_FOR_ACCESSIBILITY_NO
      return dialog
}

onCreateDialog 階段清除 decorView 的無障礙設定

但設定這個後,開啟頁面時第一次 focus 狀態會變慢一點。