2014-11-04 11 views
8

È possibile modificare l'ordine di messa a fuoco accessibilità? Ad esempio, se ho 3 viste affiancate, con ids view1, view2 e view3, c'è un modo semplice per rendere il focus dell'accessibilità andare a view3 quando l'utente passa direttamente da view1?Modifica ordine focus accessibilità

Ecco che cosa ho provato:

Ho il seguente in un layout lineare.

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

Quindi, avvio questo e posiziono l'accessibilità sul primo imageView. Scorrendo verso destra per passare all'elemento successivo, mi aspetto che sposterà il focus dell'accessibilità a imageView3, ma invece andrà a imageView2.

+2

Tecnicamente sì, è possibile specificare in modo esplicito l'ordine di attraversamento se si imposta AccessibilityDelegate e si aggiungono manualmente i nodi figlio, ma ciò causa altri problemi e non è garantito che funzioni se TalkBack cambia il modo in cui gestisce l'attraversamento del focus. È ancora una richiesta di funzionalità aperta contro il framework di accessibilità. – alanv

+0

@alanv Ti capita di avere un collegamento alla richiesta di funzionalità in sospeso? Mi piacerebbe seguire i suoi progressi. Cambiare l'ordine di attraversamento sarebbe particolarmente utile per il nuovo pulsante di azione mobile. Se è mobile su un elenco di caricamento automatico, un utente potrebbe non trovarlo mai scorrendo verso destra. (Vedi Inbox per esempio di questo problema) –

+0

Nevermind, sembra che sia stato appena aggiunto in API 22! Aggiunta una risposta al quesiton originale. –

risposta

8

Sembra che ora sia possibile impostare l'ordine di attraversamento di TalkBack per l'API 22+! Quindi il codice sarebbe simile a questa:

<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: Imposta l'id di una visione, dopo che questo è visitato in materia di accessibilità attraversamento.

+10

Esiste una soluzione per questo per le versioni <22? – vtlinh

+3

Penso che la domanda @vtlinh sia ancora più importante di quella originale. 22 è troppo recente. Qualcuno sa qual è la soluzione per le versioni precedenti? – Carlos

+0

Ho riscontrato problemi nell'utilizzo di questo elemento in 'RecyclerView'. Salta alla voce successiva della lista dopo aver attraversato l'oggetto corrente. – azizbekian