Android TalkBack在屏幕旋转

时间:2016-11-25 07:34:39

标签: android position restore screen-rotation talkback

用例:

  1. 启用 Google TalkBack 辅助功能服务并导航至 应用(例如 Google Messenger
  2. 在此应用中,假设您将看到列表项目 选择,使用对讲手势任意导航到其中一个(向右滑动或只是在其中一个上单击
  3. 旋转屏幕
  4. 预期行为:

    • 以前突出显示的项目仍应突出显示;用户 应该能够继续它的导航
    • Google Messenger应用是这个正确的完美示例 行为

    Messenger After rotation

    我的阳光应用行为:

    • 屏幕后未突出显示先前突出显示的项目 旋转
    • 用户必须再次导航到之前选择的项目
    • 根据屏幕的不同,查找和重新选择项目可能会很痛苦......不是我们想要引导给用户的

    Sunshine After rotation

    我们应该如何实施? 作为解决方案,我在无障碍事件中思考并拦截它们......但这似乎并不正确,似乎不是最佳实践" (例如,创建自定义视图并实现处理这些事件的方法)

    请注意,绿色突出显示的列表项似乎没有聚焦( getCurrentFocused()返回 null

    请注意,如果我们使用D-Pad导航而不是TalkBack导航,则列表项会变得集中(但这是另一个讨论...)

    L.E:

    • 我花了一整天的时间,试着去关注#34;的 突出显示的项目,但该项目不是聚焦。这就是我假设的原因 这个功能必须以其他方式解决,我想 在我再花2天之前知道你的()经验丰富的意见 重新创建所有使用过的Android组件(因为我认为它可以完成 - 这听起来不是非常"最佳实践",它不是
    • 这不是家庭作业,我当前的代码没有任何问题 (所以,没有代码可以发布,除非有人想要我的整个项目) 而且,鉴于这是我的第一篇文章,我不能超过2个 图片(这就是"之前"屏幕缺失的原因)
    • 根据经验给我一个很好的提示,我会实施并在此处发布完成的,有效的代码

2 个答案:

答案 0 :(得分:0)

如果您在RecyclerView.Adapter中实施了稳定的ID,并且可能会停用ItemAnimatorRecyclerView)上的rv.setItemAnimator(null),那么它应该是开箱即用的有条件的,如果启用了TalkBack)。

这是a blog post I wrote about the item animator bug

答案 1 :(得分:0)

我在处理同一个项目时遇到了同样的问题。

提示:listView.setItemChecked(int position, boolean value);

祝你好运:)