当前位置: 首页 > 知识库问答 >
问题:

使用TalkBack时,当TextView的内容发生变化时,提醒用户的首选方式是什么?

宦翔
2023-03-14

我有一个解锁屏幕,提示用户输入四位密码。如果用户输入密码不正确,则会显示一个以前不可见的TextView并显示一条错误消息。此时,TalkBack大声朗读错误消息的内容会很有用。

通过一些实验,我意识到我可以在视图上设置android: Focus usableInTouchMode="true"并以编程方式调用View#Request estFocus()。这是第一次工作,但在随后的错误中失败,因为视图已经有焦点。此外,覆盖当前视图焦点通常似乎是个坏主意。

然后,我尝试在显示错误消息时调用View#announceForAccessibility(java.lang.CharSequence)。显然,如果视图当前不可见,此方法将以静默方式失败。没有问题,否则它工作得很好。但是,它仅在API级别16(Jelly Bean)中可用,这确实限制了它的实用性。必须有一个更好的解决方案,因为TalkBack支持API级别7 。

我看了2011年和2012年关于可访问性的Google I/O会议,但似乎都没有涵盖这个基本用例。做这件事的最好方法是什么?

编辑1:TLDR;在Jelly Bean中引入< code > View # announceForAccessibility(Java . lang . char sequence)之前,有没有办法强制TalkBack大声朗读一些文本?

共有3个答案

简宏义
2023-03-14

好的,如果您使用的是L或更高版本,更好的答案是使用:http://developer.android.com/reference/android/view/View.html#setAccessibilityLiveRegion(int)

这将为你做所有的工作。

锺玺
2023-03-14

我使用的是公认的答案,效果很好。然而,我不喜欢在文本视图上设置可访问性焦点时的误导性声音-与通过双击(一种抽屉打开的声音)将输入焦点提供给EditField时的声音相同,因为输入焦点实际上没有从具有inputfocus的EditText移动(例如,使用光标)。

所以我试着:

m_textView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);`

有趣的是,它是有效的——标签被读取,没有移动任何焦点或发出任何其他声音。

方祺
2023-03-14

您应该能够在<code>文本视图以与<code>视图相同的方式触发对讲。requestFocus()会这样。因为它只触发事件,实际上并不聚焦视图,所以它不应该在第一次之后崩溃。

 类似资料:
  • 问题内容: 假设我有一个普通对象列表,然后可以用来呈现子级列表。那么将对象插入其中的正确方法是什么? 以下是我认为它将起作用的唯一方法,因为您不能像文档中提到的那样直接更改。 这对我来说似乎很丑。有没有更好的办法? 问题答案: 返回一个新数组,所以你可以做 另一个选择是React的不变性助手

  • 我在这里使用来制作一个UI应用程序。我创建了一个JFrame,带有一些按钮。当我点击这个按钮时,我想要一个新的JFrame,在这里有一些不同的内容。但是,我不想在这里加载新的JFrame。 我知道的一种方法是在第一个JFrame中的按钮的方法中将第二个JFrame的可视化设置为True。但是它再次加载了一个新的JFrame,我不希望这样。 我只想要一个JFrame,当我们点击不同的按钮时,它的内容

  • 在IntelliJ 2018.1的首选项中(构建、执行、部署 使用“-release”选项进行交叉编译(Java 9及更高版本) 我在网上搜索时找到了一些信息。“?”单击帮助图标时会出现404错误。 这个选项的目的/功能是什么?

  • 本文向大家介绍写一个网络不通时则提醒用户的方法相关面试题,主要包含被问及写一个网络不通时则提醒用户的方法时的应答技巧和注意事项,需要的朋友参考一下

  • 我有一些代码在一个从数据库中查询出来的列表上进行迭代,并对该列表中的每个元素发出HTTP请求。这个列表有时可能是一个相当大的数字(以千为单位),我希望确保我没有用数千个并发HTTP请求访问web服务器。 这段代码的缩写版本目前看起来像这样... 此代码正在节点4.3上运行。2.重申,可以都必须进行管理,以便在任何给定的时间内只进行一定数量的promise?

  • 我在yarn cluster上运行的spark应用程序崩溃了,我正在试图确定根本原因。在我使用从yarn获得的日志中,我看到在块获取期间有一大堆连接被拒绝,还有一个内存不足错误。很难说出根本原因是什么。我的问题是当容器因为OutOfMemory异常而被杀死时会发生什么。因此,在容器日志中,我看到这是如何在容器上启动执行器的 我还看到许多。在应用程序崩溃之前,似乎有多个这样的问题。spark重试一个