Zaznaczanie pól tekstowych

Gdy użytkownicy poruszają się po interfejsie Compose za pomocą klawiatury sprzętowej, pada kierunkowego lub kontrolera obrotowego, pola tekstowe uczestniczą w nawigacji za pomocą fokusu wraz z innymi elementami, na których można ustawić fokus.

Domyślnie fokus nie jest blokowany w polach tekstowych. Aby umożliwić użytkownikom opuszczenie pola tekstowego, nie musisz dodawać niestandardowych procedur obsługi zdarzeń klawiszy (onKeyEvent lub onPreviewKeyEvent). Użytkownicy mogą zawsze wyjść z tego trybu, naciskając Shift+Tab lub przechodząc poza granice tekstu za pomocą klawiszy kierunkowych.

KeyboardOptions może służyć do zapewnienia intuicyjnego działania klawiatury ekranowej, które jest skoordynowane z nawigacją za pomocą klawiatury sprzętowej. ImeAction.Next przenosi zaznaczenie na następny element, na którym można ustawić fokus.

Przechodzenie fokusu w jednym wymiarze

W przypadku jednowymiarowego przechodzenia między elementami za pomocą klawisza Tab jego działanie zależy od wartości parametru lineLimits skonfigurowanego w polu tekstowym:

  • Pola tekstowe jedno wierszowe (TextFieldLineLimits.SingleLine) Naciśnięcie klawisza Tab przenosi zaznaczenie na kolejny element interfejsu, na którym można skupić uwagę.
  • Pola tekstowe wielowierszowe (TextFieldLineLimits.MultiLine() lub domyślne): naciśnięcie klawisza Tab wstawia do bufora tekstu znak tabulacji (\t), zamiast przenosić zaznaczenie.
  • Nawigacja wsteczna (Shift+Tab): naciśnięcie Shift+Tab bezwarunkowo przenosi zaznaczenie wstecz do poprzedniego elementu, na którym można ustawić fokus, zarówno w jednowierszowych, jak i wielowierszowych polach tekstowych.

// Single-line text field: Tab advances focus to the next focus target
BasicTextField(
    state = singleLineState,
    lineLimits = TextFieldLineLimits.SingleLine,
    modifier = Modifier.fillMaxWidth()
)

// Multi-line text field: Tab inserts '\t'; Shift + Tab moves to previous target
BasicTextField(
    state = multiLineState,
    lineLimits = TextFieldLineLimits.MultiLine(),
    modifier = Modifier.fillMaxWidth()
)

Przechodzenie między elementami w 2D

Podczas korzystania z klawiszy strzałek (lub pada kierunkowego) klawisze kierunkowe najpierw przesuwają kursor tekstowy (caret) w polu tekstowym:

  • Nawigacja w pionie (w górę lub w dół): naciśnięcie klawisza Down powoduje przesunięcie kursora w dół o jeden wiersz. Gdy kursor dotrze do ostatniego wiersza, ponowne naciśnięcie klawisza w dół przeniesie zaznaczenie na sąsiedni element poniżej pola tekstowego. Naciśnięcie klawisza w górę w pierwszym wierszu przenosi zaznaczenie na poprzedni element.
  • Nawigacja w poziomie (lewo / prawo / początek / koniec): naciśnięcie klawiszy strzałek w poziomie przesuwa kursor między znakami. Gdy kursor dotrze do początku lub końca bufora tekstu, ponowne naciśnięcie klawisza kierunkowego przeniesie zaznaczenie na sąsiedni element w tym kierunku.

Pola tekstowe na Androidzie TV

Na Androidzie TV przy użyciu kontrolerów z padem kierunkowym bez klawiatury fizycznej:

  1. Przeniesienie zaznaczenia do pola tekstowego powoduje automatyczne wyświetlenie klawiatury ekranowej.
  2. Użytkownik porusza się po klawiszach klawiatury ekranowej za pomocą pada kierunkowego.
  3. Naciśnięcie przycisku Wstecz powoduje zamknięcie klawiatury ekranowej, ale fokus pozostaje w polu tekstowym.
  4. Po zamknięciu klawiatury ekranowej naciśnięcie klawiszy kierunkowych na padzie D-pad przenosi zaznaczenie na sąsiednie elementy na ekranie.
  5. Ponowne naciśnięcie przycisku Wstecz powoduje standardowe przechodzenie wstecz w systemie.