Supporta la navigazione da tastiera

Oltre ai metodi di immissione temporanea, come le tastiere sullo schermo, Android supporta tastiere fisiche collegate al dispositivo. La tastiera offre una comoda modalità per l'inserimento di testo e un modo per gli utenti di navigare e interagire con l'app. Sebbene la maggior parte dei dispositivi portatili, ad esempio i telefoni, utilizzi il tocco come modalità di interazione principale, sono molto diffusi tablet e dispositivi simili e molti utenti preferiscono collegare accessori per tastiera.

Poiché sempre più dispositivi Android offrono questo tipo di esperienza, è importante ottimizzare l'app in modo che supporti l'interazione tramite tastiera. Questo documento descrive come migliorare la navigazione con una tastiera.

Testare l'app

Gli utenti potrebbero essere già in grado di navigare nella tua app utilizzando una tastiera, perché il sistema Android attiva la maggior parte dei comportamenti necessari per impostazione predefinita.

Tutti i widget interattivi forniti dal framework Android, come Button e EditText, sono disponibili. Ciò significa che gli utenti possono navigare con dispositivi di controllo come i D-pad o la tastiera e ogni widget si illumina o cambia il suo aspetto quando viene attivato.

Per testare l'app, esegui la seguente procedura:

  1. Installa la tua app su un dispositivo che offre una tastiera hardware.

    Se non hai un dispositivo hardware con una tastiera, collega una tastiera Bluetooth o una tastiera USB.

    Puoi anche utilizzare l'emulatore Android:

    1. In Gestione AVD, fai clic su Nuovo dispositivo o seleziona un profilo esistente e fai clic su Clona.
    2. Nella finestra visualizzata, assicurati che Tastiera e DPad siano abilitati.
  2. Per testare la tua app, usa solo il tasto Tab per spostarti nella UI. Assicurati che ogni controllo dell'interfaccia utente venga impostato come previsto.

    Cerca eventuali istanze in cui l'elemento attivo si sposta in modo imprevisto.

  3. Ricomincia dall'inizio dell'app e spostati all'interno dell'interfaccia utente utilizzando i controlli di direzione, come i tasti freccia sulla tastiera. Da ogni elemento attivabile nell'interfaccia utente, premi Su, Giù, Sinistra e Destra.

    Cerca eventuali istanze in cui l'elemento attivo si sposta in modo imprevisto.

Se si verificano casi in cui la navigazione con il tasto Tab o con i controlli di direzione non esegue il comportamento previsto, specifica dove deve essere impostato lo stato attivo nel layout, come illustrato nelle sezioni seguenti.

Gestire la navigazione nelle schede

Quando un utente naviga nell'app utilizzando il tasto Tab della tastiera, il sistema passa lo stato attivo di input tra gli elementi in base all'ordine in cui vengono visualizzati nel layout. Se, ad esempio, utilizzi un layout relativo e l'ordine degli elementi sullo schermo è diverso da quello nel file, potrebbe essere necessario specificare manualmente l'ordine di messa a fuoco.

Ad esempio, nel layout seguente, due pulsanti sono allineati a destra e un campo di testo è allineato a sinistra del secondo pulsante. Per impostare lo stato attivo dal primo pulsante al campo di testo e poi al secondo pulsante, il layout deve definire esplicitamente l'ordine di impostazione dello stato attivo per ogni elemento attivabile con l'attributo android:nextFocusForward.

<androidx.constraintlayout.widget.ConstraintLayout ...>
    <Button
        android:id="@+id/button1"
        android:nextFocusForward="@+id/editText1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        ... />
    <Button
        android:id="@+id/button2"
        android:nextFocusForward="@+id/button1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button1"
        ... />
    <EditText
        android:id="@id/editText1"
        android:nextFocusForward="@+id/button2"
        app:layout_constraintBottom_toBottomOf="@+id/button2"
        app:layout_constraintRight_toLeftOf="@id/button2
        ...  />
    ...
</androidx.constraintlayout.widget.ConstraintLayout>

Ora, invece di spostare l'elemento attivo da button1 a button2 e poi a editText1, si sposta correttamente in base all'aspetto sullo schermo: da button1 a editText1 e poi button2.

Gestire la navigazione direzionale

Gli utenti possono navigare nell'app anche utilizzando i tasti freccia su una tastiera, che funziona come quando navigano con un D-pad o una trackball. Il sistema fornisce la "migliore ipotesi" per quale vista concentrare l'attenzione in una determinata direzione in base al layout delle visualizzazioni sullo schermo. Tuttavia, a volte il sistema prevede sbagliato.

Se il sistema non passa lo stato attivo alla visualizzazione appropriata quando la navigazione avviene in una determinata direzione, specifica quale vista deve essere attiva con i seguenti attributi:

Ogni attributo indica la vista successiva su cui impostare lo stato attivo quando l'utente naviga in quella direzione, come specificato dall'ID vista. Ciò è illustrato nell'esempio seguente:

<Button
    android:id="@+id/button1"
    android:nextFocusRight="@+id/button2"
    android:nextFocusDown="@+id/editText1"
    ... />
<Button
    android:id="@id/button2"
    android:nextFocusLeft="@id/button1"
    android:nextFocusDown="@id/editText1"
    ... />
<EditText
    android:id="@id/editText1"
    android:nextFocusUp="@id/button1"
    ...  />

Risorse aggiuntive

Consulta le seguenti risorse correlate: