我正在尝试使“话语提示”适用于我的Android应用程序,在我的应用程序布局中,我在RecyclerView中有一个CardViews列表,每个CardView包含多个TextViews和多个Button:App layout image
当我打开Android TalkBack并点击CardView时,TalkBack会宣布所有TextView,但不会宣布任何按钮。如果我继续向右滑动,按钮将一一聚焦。不知道我的理解是否正确,但是好像TalkBack对待TextViews和Buttons的方式有所不同,因为按钮是可聚焦的。
有没有办法使“话语提示”宣布CardView上的所有内容(“文本视图”和“按钮”)并使按钮保持焦点(这样我仍然可以通过滑动来将焦点设置在按钮上)?
PS:
一种有效的解决方案是直接在CardView上设置内容描述,并使该内容描述包含TextViews和Buttons的所有内容,但这有点不客气,因此,我在这里尝试找到一个更好的解决方案。
任何帮助表示赞赏。谢谢!
最佳答案
您所描述的行为是预期的,并且您的解决方案是正确的。
对于没有明确内容描述的ViewGroup,TalkBack会尝试通过合并所有子项的内容描述(如果从TextView扩展到视图,则为文本值)来从子项中推论一个。
由于按钮本身是可操作的(可聚焦/可单击),因此它们不包含在推断的内容描述中。
在卡上设置明确的内容描述是正确的方法-您的目标应该是描述卡所代表的信息。 IMO,它不应该包含按钮的描述,因为它们可以单独聚焦,并且当用户专注于它们时会大声朗读。
IMO的最佳方法是:如果启用了话语提示,则将按钮隐藏起来,并将卡显示为包含单个操作和一个明确设置的内容说明的实体。
重要的是不要减少TalkBack用户的功能-所有可以实现的用户目标都应该可以实现;并不要求所有用户必须以相同的方式实现目标。因此,在这种情况下,您可以将卡片的主要动作作为点击动作,并通过应用程序其他位置的按钮来提供动作。
一种有效的模式是单击时显示一个对话框,其中包含所有操作。这有两个好处:
该卡是单动作,因此在卡之间导航仅是一次滑动
默认情况下,默认对话框是可访问的-无需额外的工作
我wrote a blog post解释了如何使用(或不使用)我帮助编写的库。 “动作对话框”下的部分是相关的位。