可访问性对话框/DialogFragment读取文本而不是内容描述



我有一个对话框,有几个textviews。对于每个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)的每个textview,而不是内容描述(即。电视3)。

但是,如果我将鼠标悬停在任何textview上,Talkback将读取内容描述。

当显示对话框时,我如何使它读取内容描述?

PS:我已经尝试设置布局以及通过代码的内容描述,但没有运气

这是顶级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());
}

请记住,在大多数情况下,您希望文本视图的内容描述和视觉外观相匹配,重写默认行为可能会导致意想不到的结果。一般建议不要在文本视图上设置内容描述。

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

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

最新更新