首页 文章

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

提问于
浏览
1

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

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

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

PS:

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

任何帮助表示赞赏 . 谢谢!

2 回答

  • 0

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

  • 0

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

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

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

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


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

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

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

    • 卡是单动,因此在卡之间导航只能单击

    • 默认情况下可以访问默认对话框 - 无需额外的工作

    wrote a blog post解释了如何使用(和没有)我帮助编写的库来完成它 . "actions dialog"下的部分是相关位 .

相关问题