android - 对讲没有宣布按钮的“按选择激活”
问题描述
当用户导航到时,我想给出以下对讲事件序列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)
}
})
}
上面的代码按要求的顺序工作,但它没有宣布类类型,即按钮和动作描述“按下选择激活”最后
解决方案
这里有很多代码试图控制 TalkBack 用户体验。我们通常建议只向无障碍 API 提供正确的信息,并允许 TalkBack 处理与用户的通信。
我们建议根本不要尝试设置可访问性焦点。在每个可访问性事件上设置它可能会导致一些非常不受欢迎的副作用。
如果您只是删除所有这些代码,如果按钮没有文本(尽管可能在 xml 中),可能除了内容描述之外,该怎么办?
我们知道,TalkBack 在对话中的初始焦点并不总是最佳的,但由于 TalkBack 做到了,它应该在各个应用程序中保持一致。如果我们找到更好的解决方案,那么它在应用程序中的表现将始终如一。每当 TalkBack 更改时,此类代码的解决方法可能会中断。
推荐阅读
- python - 如何检查嵌套列表是否是另一个嵌套列表的子集
- asp.net-core - 使用 PropertyBuilder.HasValueGenerator 并连接到数据库上下文
- java - 在 Azure 应用服务上运行 SonarQube 会在启动服务时出现拒绝访问错误
- ios - Xamarin.Firebase.iOS.Core 插件不适用于我的 Xamarin iOS 项目
- firebase - ionic phonegap push 没有得到 ios 的令牌
- arrays - 在arduino中从字节数组重建图像
- if-statement - 多个 IF 语句才能做出正确的陈述?
- c# - 需要从一种形式获取一个 int 变量以在另一种形式中使用
- ruby-on-rails - 尝试上传多个文件返回 nil 值数组(Rails 应用程序)
- sql - laravel 版本的 sql (选择 where 1stCondition and ( 2nd)condition or 3rd_condition)