簡體   English   中英

Android 輔助功能 - 如何在某些文本出現時設置輔助功能焦點?

[英]Android Accessibility - how to set accessibility focus on some text when it appears?

我有一個頁面,用戶需要在其中輸入他們的 email,然后點擊底部的按鈕進行確認。 在確認email的同時,屏幕上出現了ProgressDialog的疊加。 當在EditText中輸入無效的 email 時,就像輸入字母“a”一樣,錯誤消息會以 TextView 的形式出現在 EditText 下方。我正在嘗試使此頁面更易於訪問。

我打算采用的方法是讓 TalkBack 模式在錯誤文本出現時將焦點放在錯誤文本上。 但是,這不是很有效。 相反,當取消ProgressDialog覆蓋時,Talkback 沒有選擇屏幕上的任何內容,我注意到“確認”按鈕仍然出現在選定的 state 中,我聽到應用程序再次宣布應用程序名稱,就好像 Activity正在重新創建(盡管不是)。 此時向右滑動將 select 顯示在屏幕上的第一個視圖。 值得注意的是,當對講模式未打開時,確認按鈕不會出現“已選擇”state,就像打開對講模式時一樣。

這是我試過的代碼:

private fun onServerResult() {
    ...
    dismissDialogOverlay()
    if (error) {
        showError(errorMessage)
    }
}

private fun showError(msg : String?) {
    mTvEmailError.text = msg
    mTvEmailError.visibility = View.VISIBLE
    mTvEmailError.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) //want focus now!
}

我也嘗試過mTvEmailError.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED)並嘗試將每個與 accessibilityEvent 與mTvEmailError.requestFocus()配對。 沒有運氣。

我希望發生的是mTvEmailError成為對講模式下的選定視圖。 相反,按下按鈕后沒有選擇任何內容。 就像點擊確認按鈕后對講模式完全消失一樣。

mTvEmailError.postDelayed({ mTvEmailError.requestFocus() }, 300)

//說明 requestFocus function 需要在單獨的線程中調用,如果直接調用會在主線程中調用,在主線程中可能會發生其他進程,如果調用 requestFocus() function 可能會出現流量,所以我們需要以 300 毫秒的延遲調用單獨的線程。

我遇到了與 OP 完全相同的問題,逐字逐句。

解決了這個:

editTextObject.performAccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK, null);

現在在對話框之后,輔助功能取消選擇啟動對話框的按鈕。 輔助功能焦點在EditText上,TalkBack 讀取與 EditText 相關的所有內容,包括錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM