如何告诉 TalkBack 自定义视图被用作按钮

How to tell TalkBack a custom view is being used as a button

我在 Android 上使用自定义视图作为按钮,它没有继承自 android.widget.Button。告诉无障碍服务它是一个按钮的最佳方式是什么?

仅在视图上调用 setClickable(true) 就足够了吗?

对于标准 Button,TalkBack 会附加单词 "button" 作为提示,但对于自定义视图则不会这样做。我应该在某处添加单词 "button" 作为提示吗?

在 iOS 上,我会在视图中添加一个按钮 "trait",VoiceOver 将其作为按钮通告。 Android 上有类似的东西吗?

如果您深入了解 TalkBack 项目,在 Role.java 中,您会看到提示文本 "button" 适用于以下情况:

  • 元素的 class 为 android.widget.Button

  1. 元素的 class 为 android.widget.ImageView
  2. 元素isClickable()

但是,任何 isClickable() 都会应用提示文本 "Double tap to ...."。所以,答案是否定的,你不应该。 "Button" 意味着 TalkBack 用户非常特殊,最好让 Android 操作系统和 TalkBack 一起工作来弄清楚那是什么。

如果 TalkBack 只是将所有普通可点击的东西作为按钮宣布,而不是将该信息放在延迟的提示文本中,会更好吗:"Double tap to..."(... = 展开、激活等,具体取决于控件) 是的,它可能会。

如果Android允许你说:"Yes this thing I've subclassed is a button",比如iOS特质会不会更好。是的,它可能会。

事实上,我认为鉴于:"Double tap to ...." 公告,在这种情况下 "button" 的公告是附加信息。 "Button" 表示可以双击操作。如果 "button" 公告仅适用于 "buttons",则情况并非如此,因为 "android.widget.Button" 对象以某些方式设置样式(通常)。但是,由于这也适用于 IMAGE_VIEWS,而不适用于其他简单的 "clickable" 视图,因此其目的是模糊的,最终无用且令人困惑。并且不,你不应该试图纠正这个。做到这一点绝对是 TalkBack 的工作,它确实做到了……只是以其他方式。让我解释一下:

按钮公告基本上已被弃用,取而代之的是延迟公告"double tap to ..."。 "button" 公告作为对习惯该公告的用户的传统支持而保留。

总结一下:确保 "Double tap to ...." 在您控制之后公布。不过,只需确保您的节点具有点击侦听器并且 "isClickable" 就足够了。这个延迟的提示公告是重要的一点。 "button" 的公告并不重要,是 TalkBack 项目开发早期做出的不幸决定遗留下来的遗留垃圾。那个,或者在未来的版本中它将被修复以应用于所有可点击的东西(如自定义控件)。无论哪种方式,在您的内容描述中添加单词 "button" 都是不明智的。