[英]Talkback announces focused button's label first before the title on Android TV
我正在為 Android 電視實現一個屏幕,它在左側有一個屏幕標題和一個按鈕。 以及在頁面右側垂直排列的自定義視圖/行(可選擇/可點擊)列表。
當用戶看到該屏幕時,我們希望左側的按鈕成為焦點。 為此,我在片段的onResume()
中調用button.requestFocus()
。
這破壞了可訪問性。 啟用對講時,首先宣布的是按鈕的 label。 我想要的是先宣布標題,然后是按鈕的label。
我試圖通過以下方式宣布自定義文本(可能是標題)
rootView.announceForAccessibility(accessibilityText)
其中rootView
是 xml 布局的根, accessibilityText
是需要公布的文本。
但這並沒有幫助,按鈕的 label 獲得了優先權。
我該如何解決這個問題?
我會請您考慮WCAG 指南 3.2.1:
此成功標准的目的是確保在訪問者瀏覽文檔時功能是可預測的。 任何能夠在收到焦點時觸發事件的組件都不得更改上下文。 當組件獲得焦點時更改上下文的示例包括但不限於:
- forms 組件獲得焦點時自動提交;
- 新的 windows 在組件獲得焦點時啟動;
- 當該組件獲得焦點時,焦點將更改為另一個組件; <-- 這里強調
還有來自Android 輔助功能團隊的報價:
因此,人們喜歡做的類似事情是自己管理可訪問性焦點。 再說一次,這是一個壞主意。 可訪問性焦點必須由可訪問性服務確定,就像公告一樣,這會造成體驗的不一致。 實際上,可訪問性用戶面臨的最大問題之一是跨應用程序和隨時間推移的不一致。
話雖如此,您可能需要考慮使用以下屬性來確保組件的焦點順序/優先級:
android:nextFocusUp
android:nextFocusDown
android:nextFocusLeft
android:nextFocusRight
並且還要確保任何可能被突出顯示的組組件都設置了importantForAccessibility
屬性。
我想嘗試更多幫助,但沒有示例 XML 文件,很難找到您的特定用例。 您是否嘗試過使用可訪問性用戶測試視圖布局?
我從 ATAUL MUNIM 的這篇文章中得到啟發。 在明確請求焦點之前,我添加了一個檢查是否啟用了對講。
protected fun isTalkBackEnabled(): Boolean {
val a11yServices = context?.getSystemService(ACCESSIBILITY_SERVICE) as? AccessibilityManager
return a11yServices?.isTouchExplorationEnabled?:false
}
和
if(isTalkBackEnabled().not()) {
button.requestFocus()
}
這個解決方案幾乎讓我擺脫了我面臨的問題。 這也是我前進的唯一途徑,因為我的應用程序的最低 API 級別為 21,這消除了使用android:screenReaderFocusable
的選項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.