【问题标题】:Android Recyclerview Talkback issueAndroid Recyclerview 对讲问题
【发布时间】:2016-04-08 07:03:27
【问题描述】:

我有一个 Android Recyclerview,它有更多的项目行。

从某种意义上说 Recyclerview 包括
第 1 行 ->> TextView ,下面还有一个 textview

Row 2 ->> TextView ,下面还有一个 textview

问题是,每当我打开 Talkback 时,它会一口气读出整个 Recyclerview,这是意料之中的,它应该根据焦点项目一次读取一个项目。

预期的行为是 - 当 d-pad 移到焦点上时读取焦点上的组件。

有什么帮助吗??

【问题讨论】:

  • 您的回收站视图是否标记为对可访问性很重要?
  • 它没有设置任何东西,但我在recyclerview xml中手动使用它,现在它工作正常。
  • 你把它设置成什么?如果这确实是解决方案,那么 RecyclerView 的构造函数可能会被破坏。
  • 我在 xml 中为 recyclerview 设置了 android:importantForAccessibility="no"。是的,我想这确实是一个缺陷
  • 作为答案发布。

标签: android android-recyclerview talkback


【解决方案1】:

与 ChrisCM 的回答相反,您不应该设置...

android:importantForAccessibility="no"

...在您的RecyclerView 上。这将禁用与您的列表相关的所有本机可访问性功能,包括 ACTION_SCROLL_FORWARD / ACTION_SCROLL_BACKWARD 操作 (Accessibility Source),以及附加“列表内”/“列表外”的能力可访问性公告的上下文。

相反,您应该设置...

android:focusable="true"
android:focusableInTouchMode="true"

...在您的列表项的根布局上,这将使它们能够在无障碍用户导航到它们时单独获得焦点。

【讨论】:

  • 这很有趣,我刚刚测试了您的声明,我正在使用对讲很好地滚动!此外,“focusable”和“focusableInTouchMode”与 TalkBack 开启时设备的行为方式完全无关。鉴于此上下文中的焦点定义,让 TextView 接收焦点几乎没有意义。
  • 您可以添加一个事实,即它应该放置在您希望在 recyclerview 中导航时找到的每个元素(按钮除外)中(是的,它也适用于 RecyclerView)
  • 这比将android:importantForAccessibility 设置为no 效果更好。正如@AlgoRyan 指出的那样,它确实禁用了本机可访问性滚动
  • Google 是否有关于此问题的错误报告?
【解决方案2】:

似乎在构建过程中的某个时刻,您的 Recycler View 被标记为 importantForAccessibility。当容器视图被标记为对可访问性很重要时,它会收集该容器内的所有信息并将其作为内容描述进行宣布。

这应该可以纠正这种情况。

android:importantForAccessibility="no" //Or "auto"

如果您在代码中没有设置此选项,那么这似乎是您的 Android 风格的错误。这当然不是可取的默认行为。

编辑:

将“否”更改为“自动”。实际上,我们只是希望它不是“是”,这是造成不良行为的价值。自动在现代设备上使用 Switch Control 表现更好。

对此进行了一段时间的调查,我认为这里没有与 Android 操作系统版本无关的解决方案。 Android API 已在太多版本中多次更改其对 Focusability 与 Accessibility Focusability 的定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2017-03-02
    相关资源
    最近更新 更多