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

Tom*_*der 3 android accessibility accessibilityservice talkback android-accessibility

我正在使用自定义视图作为Android上的按钮,它不会继承android.widget.Button.告诉辅助服务这是一个按钮的最佳方式是什么?

只是打电话setClickable(true)给视图就够了吗?

使用标准Button,TalkBack附加单词"按钮"作为提示,但使用自定义视图它不会这样做.我应该在某处添加单词"button"作为提示吗?

在iOS上,我会在视图中添加一个"trait"按钮,而VoiceOver会将其作为按钮进行宣传.Android上有类似的东西吗?

Chr*_*sCM 8

如果您浏览TalkBack项目,在Role.java中,您将看到在以下情况下应用了提示文本"按钮":

  • 该元素有一个android.widget.Button类

要么

  1. 元素有一类 android.widget.ImageView
  2. 元素 isClickable()

但是,任何isClickable()具有提示文本"Double tap to ...."的内容都适用于它.所以,答案是否定的,你不应该."按钮"是指TalkBack用户非常具体的内容,最好让Android操作系统和TalkBack协同工作来弄清楚它是什么.

如果TalkBack刚刚宣布所有简单可点击的东西作为按钮,而不是将这些信息放在延迟提示文本中:"双击到......"(... =展开,激活等,取决于控制)会不会更好?是的,它可能会.

如果Android允许你说:"是的,我将子类化为一个按钮",就像iOS特征一样,会不会更好.是的,它可能会.

事实上,我认为,鉴于:"Double tap to ...."公告,在这种情况下宣布"按钮"是附加信息."按钮"只不过是可以双击动作的东西.如果"按钮"公告仅应用于"按钮",则不会出现这种情况,因为"android.widget.Button"对象以某种方式(通常)设置样式.但是,由于这也适用于IMAGE_VIEWS,没有应用于其他简单的"可点击"视图,其目的是泥泞,最终无用和混乱.不,你不应该试图纠正这个.绝对是TalkBack的工作,要做到这一点,它确实......只是在其他方面.让我解释:

按钮的公告基本上已被弃用,取而代之的是延迟公告"双击......"."按钮"声明留给了习惯于该声明的用户的遗留支持.

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