2015-02-02 8 views
8

Ho quattro TextViews e sto cercando di controllare l'ordine in cui ottengono lo stato attivo quando un utente naviga usando TalkBack e tocca i gesti.Perché nextFocusDown non funziona con la navigazione di TalkBack?

TextView android:text="foo" android:clickable="false" android:focusable="true" android:focusableInTouchMode="true" android:id="@+id/id_foo" android:nextFocusDown="@+id/id_baz"/> 

TextView android:text="bar" android:clickable="false" android:focusable="true" android:focusableInTouchMode="true" android:id="@+id/id_bar" android:nextFocusDown="@+id/id_qux"/> 

TextView android:text="baz" android:clickable="false" android:focusable="true" android:focusableInTouchMode="true" android:id="@id/id_baz" android:nextFocusDown="@id/id_bar"/> 

TextView android:text="qux" android:clickable="false" android:focusable="true" android:focusableInTouchMode="true" android:id="@id/id_qux" android:nextFocusDown="@id/id_foo"/> 

Quando un utente attiva TalkBack, tocca "foo", e poi colpi verso il basso per navigare tra le TextViews, voglio l'ordine di andare foo-> baz-> bar-> qux. Ma l'ordine che cerco di impostare usando nextFocusDown sembra non avere alcun effetto, e invece l'ordine di messa a fuoco segue sempre le posizioni di TextViews sullo schermo. Ho provato ogni possibile combinazione di ClickTouch, Focusable e FocusableInTouchMode. Ho provato a chiamare setNextFocusDownId sulle viste nel codice. Ho provato a impostare android: imeOptions = "actionNext" su TextViews. Niente sembra funzionare. Cosa mi manca?

+0

ho avuto lo stesso problema. Ho bisogno di aiuto. – conca

risposta

2

NextFocusDown non fa riferimento ai gesti TalkBack. Si riferisce alla navigazione con i tasti freccia trackball e tastiera. I gesti di esplorazione di TalkBack sono limitati a scorrere verso il basso/a destra per la messa a fuoco successiva e a scorrere verso l'alto/a sinistra per la messa a fuoco precedente. E, naturalmente, trascina per esplorare.

+0

ma ... c'è un modo per impostare il fuoco successivo e precedente? – conca

+0

Credo che la tua ricerca sia nextFocusForward. https://developer.android.com/reference/android/view/View.html#attr_android:nextFocusForward La messa a fuoco in avanti e quella all'indietro sono riflessive. Quindi, se imposti "nextForwardFocus" come elemento, l'elemento nextFocusBackward verrà impostato automaticamente. Esempio: element1.setNextForwardFocusId (element2.id), imposterà automaticamente nextBackwardFocus di element2 su set1. – ChrisCM

2

Prova a utilizzare View.setAccessibilityTraversalAfter(int) e View.setAccessibilityTraversalBefore(int) per configurare la navigazione di TalkBack. Si prega di notare che TalkBack ha solo due direzioni:

  • avanti (scorrimento verso destra o verso il basso)
  • schiena (scorrere a sinistra o verso l'alto).

Esempio:

findView(R.id.bar).setAccessibilityTraversalBefore(R.id.quix); 
+0

Era esattamente quello di cui avevo bisogno. Grazie amico. –

+0

Queste API sono disponibili a partire dall'API 22: '- ( – azizbekian

Problemi correlati