【问题标题】:How to override Accessibility class name如何覆盖可访问性类名称
【发布时间】:2020-02-04 12:13:43
【问题描述】:

我想阻止 Talkback 宣布 Button 视图的类名。为此,我编写了以下逻辑,但它不起作用

fun setAccessibilityDelegate(view: Button?) {
    view?.setAccessibilityDelegate(object : View.AccessibilityDelegate() {
        override fun onInitializeAccessibilityNodeInfo(host: View?, info: AccessibilityNodeInfo?) {
            super.onInitializeAccessibilityNodeInfo(host, info)
            info?.contentDescription = getContentDesStartWatching()
            info?.className = ""
        }
    })
}

实际描述:“开始观看按钮,按钮双击激活”

预期描述:“开始观看按钮,双击激活

注意:无法将内容描述更改为“开始观看”,因为它是从后端检索的

【问题讨论】:

  • stackoverflow.com/questions/37843919/… 但你应该保持原样。也许您认为宣布类名听起来很奇怪,但使用这些功能的人可能希望以这种方式宣布视图。
  • @Michael 我已经是来自后端的类名,我将其添加为 Button 的内容描述,因此 Button 被宣布两次
  • 内容描述是什么?
  • 如果您无法更改后端,为什么不直接在前端添加一些从后端文本中删除“按钮”的内容。这将是当时的正确描述。不要使用 Android,但我确信快速 string.replace(" button", "")(使用等效方法)会很简单。

标签: android kotlin accessibility talkback


【解决方案1】:

这对我有用,使用 AccessibilityDelegateCompat 而不是 AccessibilityDelegate

Kotlin 代码:

fun setAccessibilityDelegate(view: View) {
    ViewCompat.setAccessibilityDelegate(view, object: AccessibilityDelegateCompat() {
        override fun onInitializeAccessibilityNodeInfo(host:View,
                                                       info: AccessibilityNodeInfoCompat) {
            super.onInitializeAccessibilityNodeInfo(host, info)
            info.className = null
            info.contentDescription = getContentDesStartWatching()
        }
    })
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2019-10-13
    • 2016-12-16
    • 2010-09-27
    • 2013-01-31
    • 2022-01-19
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多