3

我的 Android 应用程序包含一个自定义滑块控件,该控件基于SeekBar,我想将自定义文本短语附加到我的控件以解释其用于辅助功能的用途。

我已经使用 成功完成了此操作View.setContentDescription(text),并且当我请求关注我的滑块控件时,TalkBack 正确地说出该短语Activity.onCreate.

到目前为止,一切都很好。但是,当我触摸控件时,我相信它在我的 Android API 16 测试设备上设置了 AccessibilityFocus,额外的单词被添加到口语短语中,即'...seek control。0%”。我想删除这些额外的词。

我试图event.getText().clear()View.onInitializeAccessibilityEvent(event)没有成功的情况下消除它们。将事件回显到 LogCat 会报告正确的短语 inevent.contentDescription并且没有条目event.text,但是额外的单词会出现在设备硬件的音频输出中以及Menu->Settings->Accessibility->TalkBack-显示的屏幕调试文本中>设置->开发者设置->显示语音输出

请任何人都可以建议在哪里添加额外的单词,以及如何消除它们?

任何建设性的建议都将受到欢迎。谢谢。

更新

我可以看到我的自定义控件上的一些通过触摸探索(初始单击)事件没有通过它onInitializeAccessibilityEventdispatchPopulateAccessibilityEvent我故意调用的方法event.setContentDescription(null)。尽管如此,还是AccessibilityEvent使用我的自定义控件生成了一个,在代码ContentDescription中设置Activity.onCreate,加上我试图消除的额外单词。

我还在AccessibilityDelegate自定义控件的父级上设置了一个ViewGroup以显示其onRequestSendAccessibilityEvent调用。这确认没有包含 myContentDescription的事件通过。

这非常令人费解,并且在使用 API 16 的模拟器和真实硬件上都会发生。有什么想法吗?

4

2 回答 2

1

我相信这是 TalkBack 中的一个错误,并提出了Google Eyes-Free 问题 #375,包括示例代码。

更新:谷歌现在已经存档了。链接移至:http ://code.google.com/archive/p/eyes-free/issues/375

于 2014-08-06T14:11:24.957 回答
1

您还需要覆盖http://developer.android.com/reference/android/view/View.html#onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo)

并在那里设置 contentDescription。

如果要删除 0%,我会尝试更改 AccessibilityNodeInfo/AccessibilityEvent 中的类:http: //developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html#setClassName (java.lang.CharSequence )

于 2014-10-29T21:07:24.463 回答