Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓易访问性-如何设置一些文本出现时的易访问性焦点?_Android_Talkback_Android Accessibility - Fatal编程技术网

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毫秒,这似乎有效。这里一定有一些比赛条件,我不确定是什么原因造成的。