如何将Buttons与父视图相关联并通过TalkBack向用户宣布?

时间:2016-06-13 18:55:03

标签: android talkback

我正在尝试让TalkBack适用于我的Android应用,在我的应用布局中,我在RecyclerView中有一个CardView列表,每个CardView包含几个TextView和几个按钮:App layout image

当我打开Android TalkBack并点击CardView时,TalkBack会宣布所有TextView,但不会宣布任何按钮。如果我继续向右滑动,按钮将逐一获得焦点。不确定我的理解是否正确,但似乎TalkBack对TextViews和Buttons的处理方式不同,因为按钮是可聚焦的。

有没有办法让TalkBack宣布CardView(TextViews和Buttons)上的所有内容并保持Buttons可调焦(所以我仍然可以通过滑动将焦点设置在按钮上)?

PS:

一个有效的解决方案是直接在CardView上设置内容描述,并使内容描述包含TextViews和Buttons的所有内容,但这有点hacky,所以我试图找到一个更好的解决方案。< / p>

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您所描述的行为是预期的,您的解决方案是正确的。

对于没有明确内容描述的ViewGroup,TalkBack将尝试通过连接所有子项的内容描述(或视图从TextView扩展的文本值)来推断子项中的一个。

由于按钮本身是可操作的(可聚焦/可点击),因此它们不包含在推断的内容描述中。

在卡片上设置明确的内容描述是正确的方法 - 您的目标应该是描述卡片所代表的信息。 IMO,它不应该包含按钮的描述,因为它们可以单独聚焦,当用户专注于它们时会大声朗读。

最好的方法IMO是在启用TalkBack时隐藏按钮,并将卡显示为包含单个操作和单个明确设置的内容描述的实体。

重要的是不要减少TalkBack用户的功能 - 所有可实现的用户目标仍然可以实现;并不要求所有用户必须以同样的方式实现目标。因此,在这种情况下,您可以将卡片的主要操作设置为点击操作,并通过应用中其他位置的按钮提供操作。

一种效果很好的模式是在点击时显示一个对话框,其中包含所有操作。这有几个好处:

  • 该卡是单一操作,因此在卡片之间导航只能单击
  • 默认情况下可以访问默认对话框 - 无需额外的工作

wrote a blog post解释了如何使用(和没有)我帮助编写的库来完成它。 “操作对话框”下的部分是相关位。

答案 1 :(得分:0)

按钮可操作。如果您希望用户能够执行每个按钮的操作,则需要单独调整焦点。如果它们不可操作,它们就不应该是按钮。