修改辅助功能焦点顺序

All*_* Z. 12 android accessibility android-a11y

是否可以更改辅助功能焦点顺序?例如,如果我有3个视图并排,使用ids view1,view2和view3,当用户从view1向右滑动时,是否有一种简单的方法可以将辅助功能焦点转到view3?

这是我尝试过的:

我在线性布局中有以下内容.

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:id="@+id/imageView"
    android:focusable="true"
    android:nextFocusUp="@+id/imageView3"
    android:nextFocusDown="@+id/imageView3"
    android:nextFocusRight="@+id/imageView3"
    android:nextFocusLeft="@+id/imageView3"
    android:nextFocusForward="@+id/imageView3"
    android:src="@drawable/ic_launcher"/>

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:id="@+id/imageView2"
    android:focusable="true"
    android:src="@drawable/ic_launcher"/>

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:id="@+id/imageView3"
    android:focusable="true"
    android:nextFocusUp="@+id/imageView2"
    android:nextFocusDown="@+id/imageView2"
    android:nextFocusRight="@+id/imageView2"
    android:nextFocusLeft="@+id/imageView2"
    android:nextFocusForward="@+id/imageView2"
    android:src="@drawable/ic_launcher"/>
Run Code Online (Sandbox Code Playgroud)

然后,我启动它并将可访问性焦点放在第一个imageView上.在向右滑动以移动到下一个项目时,我希望它将可访问性焦点移动到imageView3,而是转到imageView2.

Kio*_*tch 20

看起来您现在可以设置API 22+的TalkBack遍历顺序!所以代码看起来像这样:

<ImageView
    android:id="@+id/imageView"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:src="@drawable/ic_launcher" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="30dp"
    android:accessibilityTraversalAfter="@id/imageView3"
    android:layout_height="30dp"
    android:src="@drawable/ic_launcher" />

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:src="@drawable/ic_launcher" />
Run Code Online (Sandbox Code Playgroud)

http://developer.android.com/reference/android/R.attr.html#accessibilityTraversalAfter

accessibilityTraversalAfter:设置视图的id,之后在可访问性遍历中访问此视图.

  • 对于<22的版本,有没有解决方案? (11认同)
  • 我认为@vtlinh问题比原来的问题更重要.22太近了.有谁知道旧版本的解决方案是什么? (3认同)
  • 我在“RecyclerView”项目中使用此功能时遇到问题。它在遍历当前项目后跳转到列表的下一项。 (3认同)
  • @Carlos @vtlinh似乎有一个compat类:[AccessibilityNodeInfoCompat](https://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html).它包含方法`setTraversalBefore`和`setTraversalAfter` (3认同)
  • 对于任何尝试此操作的人来说,它只能工作 &gt;= 22。他们对于 &lt;22 没有解决方案。 (2认同)