2014-11-04 61 views
8

可以更改輔助功能對焦順序嗎?例如,如果我有3個視圖並排放置,使用id view1,view2和view3,是否有一種簡單的方法可以使輔助焦點轉到view3,當用戶從view1向右滑動時?修改輔助功能對焦順序

這是我試過的:

我有以下線性佈局。

<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"/> 

然後,我啓動它,並將可訪問性焦點放在第一個imageView上。在向右滑動以移動到下一個項目時,我期望它將可訪問性焦點移動到imageView3,但是它會轉到imageView2。

+2

從技術上講,如果您設置了AccessibilityDelegate並手動添加子節點,您可以明確指定遍歷順序,但這會導致其他問題,並且如果TalkBack更改其處理焦點遍歷的方式,則不能保證能夠正常工作。它仍然是一個針對可訪問性框架的開放功能請求。 – alanv 2014-11-04 20:42:00

+0

@alanv你碰巧有一個鏈接到出色的功能請求?我很樂意遵循其進展。更改遍歷順序對於新的浮動操作按鈕特別有用。如果它浮動在自動加載列表上,用戶可能永遠不會通過向右滑動來找到它。 (關於這個問題,請參閱收件箱) – 2015-06-02 08:35:31

+0

Nevermind,看起來好像只是在API 22中添加的!添加了原始問題的答案。 – 2015-06-02 08:50:28

回答

8

看起來您現在可以設置API 22+的TalkBack遍歷順序!因此,代碼會是這個樣子:

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

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

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

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

accessibilityTraversalAfter:設置之後,這個人是在無障礙穿越訪問視圖的ID。

+10

對於版本<22的解決方案嗎? – vtlinh 2016-10-12 19:44:15

+3

我認爲@vtlinh問題比原來的問題更重要。 22太近了。有誰知道舊版本的解決方案是什麼? – Carlos 2017-04-18 13:38:00

+0

我在'RecyclerView'項目中遇到問題。在遍歷當前項目後,它跳轉到列表中的下一個項目。 – azizbekian 2017-07-28 09:31:18