Android 安卓易访问性-如何设置一些文本出现时的易访问性焦点?
我有一个页面,用户需要输入他们的电子邮件,然后点击底部的按钮确认。确认电子邮件时,屏幕上会出现一个Android 安卓易访问性-如何设置一些文本出现时的易访问性焦点?,android,talkback,android-accessibility,Android,Talkback,Android Accessibility,我有一个页面,用户需要输入他们的电子邮件,然后点击底部的按钮确认。确认电子邮件时,屏幕上会出现一个ProgressDialog覆盖。当在编辑文本中输入无效电子邮件时,就像只输入字母“a”一样,编辑文本下方会以文本视图的形式显示一条错误消息。我正在努力使这个页面更容易访问 我的预期方法是在出现错误文本时,让对讲模式聚焦在错误文本上。然而,这并不是很有效。相反,当ProgressDialogoverlay被取消时,屏幕上的任何内容都不会被对讲选择,我注意到“确认”按钮仍处于选中状态,我听到应用程序再
ProgressDialog
覆盖。当在编辑文本中输入无效电子邮件时,就像只输入字母“a”一样,编辑文本下方会以文本视图的形式显示一条错误消息。我正在努力使这个页面更容易访问
我的预期方法是在出现错误文本时,让对讲模式聚焦在错误文本上。然而,这并不是很有效。相反,当ProgressDialog
overlay被取消时,屏幕上的任何内容都不会被对讲选择,我注意到“确认”按钮仍处于选中状态,我听到应用程序再次宣布应用程序名称,就好像活动正在被重新创建一样(尽管没有)。此时向右滑动将选择屏幕上的第一个视图。值得注意的是,当对讲模式未打开时,确认按钮不会像对讲模式打开时一样保持“选定”状态
以下是我尝试过的代码:
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\u VIEW\u ACCESSIBILITY\u FOCUSED)
,还尝试了将每个AccessibilityEvent与mTvEmailError.requestFocus()配对。不走运
我想让mTvEmailError
成为对讲模式下的选定视图。相反,按下按钮后不会选择任何内容。就好像在点击确认按钮后,对讲模式完全消失了
mTvEmailError.postDelayed({ mTvEmailError.requestFocus() }, 300)
//解释
requestFocus函数需要在一个单独的线程中调用,如果直接调用,它将在主线程中调用,在主线程中可能会发生其他进程,如果调用requestFocus()函数,可能会发生通信量,因此我们需要在一个单独的线程中以300毫秒的延迟调用。requestFocus()
对于对讲模式不正确。在这里做一个小改动,我在postDelayed
中调用mTvEmailError.sendAccessibilityEvent(AccessibilityEvent.TYPE\u VIEW\u ACCESSIBILITY\u FOCUSED)
。这部分解决了问题-错误文本由屏幕阅读器读取。但是,屏幕阅读器不会突出显示视图,手势导航将从屏幕顶部开始,而不是从错误消息开始。此外,即使我延迟500毫秒,也会在读取电子邮件错误后宣布应用程序名称。我无法解释为什么在progressdialog被取消后视图似乎正在重新加载,以及为什么对讲模式没有突出显示任何内容。进一步调查:我需要等待更长的时间才能使其工作。在尝试发送可访问性事件之前,我暂停了1500毫秒,这似乎有效。这里一定有一些比赛条件,我不确定是什么原因造成的。