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

时间:2012-11-03 02:48:41

标签: android accessibility talkback

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

通过一些实验,我意识到我可以在视图上设置android:focusableInTouchMode="true"并以编程方式调用View#requestFocus()。这是第一次工作,但由于视图已经具有焦点,因此后续错误失败。另外,覆盖当前视图焦点似乎也是一个坏主意。

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

我已经看过2011和2012年Google I / O会话的可访问性,但似乎都没有涵盖这个基本用例。最好的方法是什么?

编辑1: TLDR;有没有办法强制 TalkBack在果冻豆中引入View#announceForAccessibility(java.lang.CharSequence)之前大声读出一些文字?

5 个答案:

答案 0 :(得分:10)

您应该可以使用View.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)上的TextView以与View.requestFocus()相同的方式触发TalkBack。由于它只触发事件,并且实际上并未对View进行聚焦,因此它不应该在第一次崩溃后崩溃。

答案 1 :(得分:8)

我使用的是已接受的答案,效果很好。但是,当在文本视图上设置辅助功能焦点时,我不喜欢误导性的声音 - 与通过双击(一种抽屉打开的声音)将输入焦点提供给EditField的声音相同,因为输入焦点实际上并没有使用inputfocus从EditText移动(例如使用光标)。

所以我试过了:

m_textView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);`

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

答案 2 :(得分:2)

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

这将为您完成所有工作。

答案 3 :(得分:2)

另一种方法是,当激活TalkBack时,另外显示带有错误文本的Toast消息。这也正在大声朗读。

答案 4 :(得分:0)

推荐的方法是在textview更改后使用以下代码。

textview.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);

它会在不关注内容的情况下阅读内容。