我正在尝试让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>
感谢任何帮助。谢谢!
答案 0 :(得分:1)
您所描述的行为是预期的,您的解决方案是正确的。
对于没有明确内容描述的ViewGroup,TalkBack将尝试通过连接所有子项的内容描述(或视图从TextView扩展的文本值)来推断子项中的一个。
由于按钮本身是可操作的(可聚焦/可点击),因此它们不包含在推断的内容描述中。
在卡片上设置明确的内容描述是正确的方法 - 您的目标应该是描述卡片所代表的信息。 IMO,它不应该包含按钮的描述,因为它们可以单独聚焦,当用户专注于它们时会大声朗读。
最好的方法IMO是在启用TalkBack时隐藏按钮,并将卡显示为包含单个操作和单个明确设置的内容描述的实体。
重要的是不要减少TalkBack用户的功能 - 所有可实现的用户目标仍然可以实现;并不要求所有用户必须以同样的方式实现目标。因此,在这种情况下,您可以将卡片的主要操作设置为点击操作,并通过应用中其他位置的按钮提供操作。
一种效果很好的模式是在点击时显示一个对话框,其中包含所有操作。这有几个好处:
我wrote a blog post解释了如何使用(和没有)我帮助编写的库来完成它。 “操作对话框”下的部分是相关位。
答案 1 :(得分:0)
按钮可操作。如果您希望用户能够执行每个按钮的操作,则需要单独调整焦点。如果它们不可操作,它们就不应该是按钮。