Supporta la navigazione da tastiera

Prova Compose
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come utilizzare il tocco e l'input in Compose.

Oltre ai metodi di input software, come le tastiere sullo schermo, Android supporta le tastiere fisiche collegate al dispositivo. Una tastiera offre una modalità comoda per l'inserimento di testo e un modo per gli utenti di navigare e interagire con la tua app. Anche se la maggior parte dei dispositivi portatili come gli smartphone utilizza il tocco come modalità di interazione principale, i tablet e dispositivi simili sono molto diffusi e molti utenti amano collegare accessori per tastiera a questi dispositivi.

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

Testa la tua app

Gli utenti potrebbero già essere 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 focalizzabili. Ciò significa che gli utenti possono navigare con dispositivi di controllo come un D-pad o una tastiera e ogni widget si illumina o cambia aspetto quando acquisisce lo stato attivo dell'input.

Per testare la tua app, esegui la seguente procedura:

  1. Installa l'app su un dispositivo che offre una tastiera fisica.

    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 le opzioni Tastiera e D-pad siano attive.
  2. Per testare la tua app, utilizza solo il tasto Tab per navigare nell'interfaccia utente. Assicurati che ogni controllo UI riceva il focus come previsto.

    Cerca eventuali casi in cui lo stato attivo si sposta in modo imprevisto.

  3. Ricomincia dall'inizio dell'app e naviga nell'interfaccia utente utilizzando i controlli di direzione come i tasti freccia della tastiera. Da ogni elemento selezionabile nell'interfaccia utente, premi Su, Giù, Sinistra e Destra.

    Cerca eventuali casi in cui lo stato attivo si sposta in modo imprevisto.

Se riscontri casi in cui la navigazione con il tasto Tab o i controlli di direzione non funziona come previsto, specifica dove deve trovarsi il focus nel layout, come descritto nelle sezioni seguenti.

Gestire la navigazione delle schede

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

Ad esempio, nel seguente layout, due pulsanti sono allineati al lato destro e un campo di testo è allineato a sinistra del secondo pulsante. Per passare lo stato attivo dal primo pulsante al campo di testo e poi al secondo pulsante, il layout deve definire esplicitamente l'ordine di messa a fuoco per ciascuno degli elementi su cui è possibile impostare lo stato attivo 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, anziché spostarsi da button1 a button2 e poi a editText1, la messa a fuoco si sposta in modo appropriato in base all'aspetto sullo schermo: da button1 a editText1 e poi a button2.

Gestire la navigazione direzionale

Gli utenti possono anche navigare nell'app utilizzando i tasti freccia di una tastiera, che si comportano allo stesso modo della navigazione con un D-pad o una trackball. Il sistema fornisce una "migliore ipotesi" su quale visualizzazione mettere in evidenza in una determinata direzione in base al layout delle visualizzazioni sullo schermo. Tuttavia, a volte il sistema indovina in modo errato.

Se il sistema non sposta lo stato attivo sulla visualizzazione appropriata quando si naviga in una determinata direzione, specifica quale visualizzazione deve ricevere lo stato attivo con i seguenti attributi:

Ogni attributo indica la visualizzazione successiva a cui verrà assegnato lo stato attivo quando l'utente si sposta in quella direzione, come specificato dall'ID visualizzazione. Ciò è mostrato 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: