我在Android上使用自定义视图作为按钮,它不会从android.widget.Button
继承。告诉辅助服务它是一个按钮的最佳方式是什么?
只需在视图上调用setClickable(true)
即可吗?
使用标准Button
,TalkBack会附加单词" button"作为提示,但有一个自定义视图,它不会这样做。我应该添加"按钮"作为某处的提示?
在iOS上,我会添加一个按钮" trait"在视图中,VoiceOver将其作为一个按钮进行宣传。 Android上有类似内容吗?
答案 0 :(得分:6)
如果您仔细阅读TalkBack项目,在Role.java中,您将看到提示文本“button”在以下情况下应用:
OR
android.widget.ImageView
isClickable()
然而,任何isClickable()
都会将提示文本“Double tap to ....”应用于它。所以,答案是否定的,你不应该。 “按钮”是指TalkBack用户非常具体的内容,最好让Android操作系统和TalkBack协同工作来弄清楚它是什么。
如果TalkBack刚刚宣布所有简单的可点击的东西作为按钮,而不是将这些信息放在延迟提示文本中:“双击到......”(... =展开,激活等等,取决于控制)是的,它可能会。
如果Android允许你说:“是的,我将子类化为按钮”,就像iOS特征一样,会不会更好。是的,它可能会。
事实上,我认为,鉴于:“双击......”公告,在这种情况下宣布“按钮”是附加信息。 “按钮”只不过是可以双击动作的东西。如果“按钮”声明仅应用于“按钮”,则不会出现这种情况,因为“android.widget.Button”对象以某种方式设置(通常)。但是,由于这也适用于IMAGE_VIEWS,没有应用于其他简单的“可点击”视图,其目的是泥泞,最终无用和混乱。不,你不应该试图纠正这个。绝对是TalkBack的工作,要做到这一点,它确实......只是在其他方面。让我解释一下:
按钮的公告基本上已被弃用,取而代之的是延迟公告“双击......”。 “按钮”声明留给了习惯于该声明的用户的传统支持。
总结:确保在您的控制之后宣布“双击....”。但是,只需确保您的节点具有单击侦听器和“isClickable”就足够了。这个延迟提示公告是重要的一点。 “按钮”的发布并不重要,遗留垃圾是因为在TalkBack项目的开发早期做出的不幸决定。那个,或者它将被修复以应用于未来版本中的所有可点击的东西(如自定义控件)。无论哪种方式,在您的内容描述中添加“按钮”一词都是不明智的。