android - 使用 onPopulateAccessibilityEvent 和 AccessibilityDelegate 自定义 recyclerview 中的可访问性

标签 android kotlin accessibility

我正在尝试为 RecyclerView 中的项目自定义对讲输出。我修改了 onBindViewHolder 方法以包含以下代码

       itemView?.setAccessibilityDelegate(object: View.AccessibilityDelegate() {
            override fun onPopulateAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
                super.onPopulateAccessibilityEvent(host, event)
                event?.let {event ->
                    if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
                        event.text.add("Hello world!")
                    }
                }
            }
        })

不幸的是,对讲输出仅针对 RecyclerView 中的最后一个可见项进行修改。

我不明白为什么委托(delegate)对某些 ViewHolders 有效,而对其他 ViewHolders 无效。

最佳答案

RecyclerViewAccessibilityDelegates 添加到其子级,以向其子级添加自己的操作。由于 View 最多可以有一个委托(delegate),因此无论第一个添加的委托(delegate)(您的还是 RecyclerView 的委托(delegate))都会被破坏。

RecyclerView 有其 own wrapper对其子级起作用的 AccessibilityDelegate 。这就是你想要的。

关于android - 使用 onPopulateAccessibilityEvent 和 AccessibilityDelegate 自定义 recyclerview 中的可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446769/

相关文章:

android - Android 上使用 JSCH 的 SSH 连接、UnknownHostException

android - 如何找出 INT 中的 Android 参数?

java - 如何让 OkHttpClient 遵守 REST API 速率限制?

ios - Voiceover 如何决定 UITableView 关注哪个单元格?

android - 具有 Material Design 风格的自定义 Android 键盘

java - 实现视频进度条

javascript - Android 中使用 Kotlin 和 Duktape 的 JS 扩展语法

javascript - 通过的 react 组件在表单标签的可访问性单元测试中失败了吗?

ios - 带自定义键盘的 VoiceOver

c# - 在 C#.net 中向多个设备(但不是所有设备)发送 FCM 通知