首页 > 解决方案 > 对讲没有宣布按钮的“按选择激活”

问题描述

当用户导航到时,我想给出以下对讲事件序列DialogFragment

1) 在导航到 时DialogFragment,初始焦点应该在正按钮上

2) 对话的标题+描述应该被宣布,而不是关注它TextView

2)最后它应该读出正面按钮的内容描述

override fun onResume() {
        super.onResume()
        positiveButton.contentDescription = "OK"
        positiveButton.announceForAccessibility(dialogArguments.title+dialogArguments.message)
        positiveButton.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT)
        ViewCompat.setAccessibilityDelegate(positiveButton, object : AccessibilityDelegateCompat() {
            override fun onPopulateAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
                super.onPopulateAccessibilityEvent(host, event)
                event?.text?.clear()
                positiveButton.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null)
            }
        })
    }

上面的代码按要求的顺序工作,但它没有宣布类类型,即按钮和动作描述“按下选择激活”最后

标签: androidaccessibilityaccessibilityservicetalkbackandroid-accessibility

解决方案


这里有很多代码试图控制 TalkBack 用户体验。我们通常建议只向无障碍 API 提供正确的信息,并允许 TalkBack 处理与用户的通信。

我们建议根本不要尝试设置可访问性焦点。在每个可访问性事件上设置它可能会导致一些非常不受欢迎的副作用。

如果您只是删除所有这些代码,如果按钮没有文本(尽管可能在 xml 中),可能除了内容描述之外,该怎么办?

我们知道,TalkBack 在对话中的初始焦点并不总是最佳的,但由于 TalkBack 做到了,它应该在各个应用程序中保持一致。如果我们找到更好的解决方案,那么它在应用程序中的表现将始终如一。每当 TalkBack 更改时,此类代码的解决方法可能会中断。


推荐阅读