Android辅助功能-出现某些文本时如何设置辅助功能焦点?

时间:2019-11-22 18:21:16

标签: android talkback android-accessibility

我有一个页面,用户需要在其中输入电子邮件,然后单击底部的按钮进行确认。确认电子邮件时,屏幕上会出现ProgressDialog覆盖图。当在EditText中输入无效的电子邮件时,就像仅输入字母“ a”一样,EditText下方将以TextView的形式显示一条错误消息。我正在尝试使此页面更易于访问。

我打算采取的方法是让“话语提示”模式集中在错误文本出现时。但是,这不是很有效。相反,当关闭ProgressDialog叠加层时,“话语提示”未选择屏幕上的任何内容,我注意到“确认”按钮仍处于选择状态,并且我听到该应用再次宣布该应用名称,好像正在重新创建活动(尽管不是)。此时向右滑动即可选择屏幕上的第一个视图。值得注意的是,未打开对讲模式时,确认按钮似乎没有保持“选择”状态,就像打开对讲模式时一样。

这是我尝试过的代码:

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成为对讲模式下的选定视图。而是在按下按钮后什么也没有选择。就像点击确认按钮后,对讲模式完全消失了一样。

1 个答案:

答案 0 :(得分:0)

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

//说明  requestFocus函数需要在单独的线程中调用,如果直接调用它将在主线程中调用,在主线程中可能还会发生其他进程,如果调用requestFocus()函数可能会发生流量,因此我们需要在具有300毫秒延迟的单独线程。