辅助功能对话框/ DialogFragment读取文本而不是内容描述

时间:2014-08-06 20:08:30

标签: android accessibility talkback accessibilityservice

我有一个对话框,文本视图很少。 对于每个textview,我设置了不同的内容描述和文本。 例如。

<TextView
    android:id="@+id/tv_3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="TV 3"
    android:text="Text Number 3" />

当我向用户显示对话框时,Talkback会读取每个文本视图的文本(即文本编号3),而不是内容描述(即TV 3)。

但是,如果我将鼠标悬停在任何文本视图上,则Talkback会读取内容说明。

如何在显示对话框时阅读内容说明?

PS:我试图在布局中设置内容描述以及通过代码但没有运气

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是顶级AccessibilityEvents如何聚合其文本的副作用。这可能需要在TalkBack中修复,但您可以通过扩展TextView或在视图上设置AccessibilityDelegate来解决应用程序中的难题。

基本上,您希望使onPopulateAccessibilityEvent()使用内容描述而不是文本填充事件。

我们假设您扩展了TextView:

public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
    // The super method would normally add the text, but we want to
    // add the content description instead. No need to call super.
    event.getText().add(getContentDescription());
}

请注意,在大多数情况下,您希望文本视图的内容描述和视觉外观匹配,并且覆盖默认行为可能会导致意外结果。一般建议是不在文本视图上设置内容描述。

答案 1 :(得分:0)

有趣的是,即使该视图具有内容描述,它也会选取第一个视觉文本。这是禁用自动读取的第一个文本的方法。

Dialog.getWindow().getDecordView().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO)