顶嘴。使 CardView 可访问

TalkBack. Make CardView accessibility

我想让我的 CardView 更易于访问。我有可点击的 CardView,我希望对讲用角色“按钮”表达这个 CardView。我不知道怎么做。

private fun setAccessibilityDescription(view: View) {
        ViewCompat.setAccessibilityDelegate(view, object : AccessibilityDelegateCompat() {

            override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
                super.onInitializeAccessibilityNodeInfo(host, info)
                info.className = Button::class.java.name
            }
        })
    }

我尝试使用 ViewCompat 并覆盖 onInitializeAccessibilityNodeInfo,它对我有帮助但不完全。角色“按钮”总是先说出来,虽然对讲通常在真正的按钮最后说“按钮”。总比没有好,但是我怎样才能让我的 CardView 的 TalkBack 听起来像一个按钮

我尝试了不同的方式,我认为对讲 api 不支持设置自定义对象,如按钮。对于我选择使用 contentDescription 的解决方案,我只是在 contentDescription 我的对象

的末尾添加单词“按钮”
private fun setAccessibilityViewTypeInfo(view: View, contentDescription: String) {
        ViewCompat.setAccessibilityDelegate(view, object : AccessibilityDelegateCompat() {

            override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) {
                super.onInitializeAccessibilityNodeInfo(host, info)
                info.contentDescription = host.context.resources.getString(
                    designR.string.talkback_button_pattern,
                    contentDescription
                )
            }
        })
    }

在我的代码 contentDescription 中,它是我的 CardView 中的所有文本并且 talkback_button_pattern

<string name="talkback_button_pattern">%1$s, button</string>

我了解人们可以在设置中更改对讲行为。 根据设置,“按钮”一词可以在配音的结尾或开头,我的解决方案不支持这种情况。不过聊胜于无

这是可能的!您需要角色描述而不是类名。通过调用 setRoleDescription,您可以将其设置为 Button。

例如:

info.roleDescription = getString(R.string.button)