Wprowadzanie rysikiem w polach tekstowych

Android 14 (poziom interfejsu API 34) i nowsze umożliwiają użytkownikom pisanie w dowolnym polu tekstowym w dowolnej aplikacji za pomocą rysika. Pola do wprowadzania tekstu na Androidzie, w tym komponenty EditText i widżety tekstowe WebView, domyślnie obsługują wprowadzanie danych w stylu.

Jeśli jednak aplikacja wymaga niestandardowych pól do wprowadzania tekstu (patrz Niestandardowe edytory tekstu) lub ma złożony układ z polami do wpisywania tekstu nakładającymi się na powierzchnię do rysowania, musisz ją dostosować.

Rysunek 1. Wprowadzanie tekstu odręcznego za pomocą rysika.

EditText

Pismo odręczne rysikiem jest domyślnie włączone we wszystkich polach EditText na Androidzie 14 i nowszych. Tryb pisma odręcznego włącza się w przypadku elementu EditText, gdy wykryte zostanie zdarzenie ruchu rysika w zakresie pisma odręcznego w widoku.

Ograniczenia pisma odręcznego obejmują 40 dp pionowego dopełnienia i 10 dp poziomego dopełnienia wokół widoku. Dostosuj granice pisma odręcznego za pomocą setHandwritingBoundsOffsets(). Wyłącz pismo odręczne w setAutoHandwritingEnabled(false).

Pole do wprowadzania danych otoczone prostokątem, które wskazuje granice wykrywania zdarzeń ruchu rysika.
Rysunek 2. Granice pisma odręcznego EditText pola.

Przekazywanie danych wejściowych

Aplikacje mogą wyświetlać zastępcze elementy interfejsu, które wyglądają jak pola do wprowadzania tekstu, ale w rzeczywistości są tylko statycznymi elementami interfejsu, które nie mają możliwości wprowadzania tekstu. Typowym przykładem są pola wyszukiwania. Kliknięcie statycznego elementu interfejsu uruchamia przejście do nowego interfejsu, który zawiera funkcjonalne pole do wprowadzania tekstu.

Rysunek 3. Dane wejściowe przekazywania dostępu ze statycznego elementu interfejsu użytkownika do pola do wprowadzania tekstu.

Przekazywanie dostępu do wprowadzania rysika

Używaj interfejsów API do przekazywania pisma odręcznego, aby obsługiwać pismo odręczne rysikiem w zastępczych polach do wprowadzania danych (patrz setHandwritingDelegatorCallback() i setIsHandwritingDelegate()). Zastępczy element interfejsu jest skonfigurowany tak, by przekazywać pismo odręczne do działającego pola do wprowadzania danych, na przykład:

Kotlin

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback {
        showAndFocusDelegateInputField()
    }
    delegateInputField.setIsHandwritingDelegate(true)
}

Java

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate);
    delegateInputField.setIsHandwritingDelegate(true);
}

Ruch rysikiem nad widokiem zastępczego pola do wprowadzania tekstu wywołuje wywołanie zwrotne. Wywołanie zwrotne aktywuje przejście interfejsu, aby pokazać i zaznaczyć funkcjonalne pole danych wejściowych. Implementacja wywołania zwrotnego zwykle jest taka sama jak implementacja odbiornika kliknięć w elemencie zastępczym. Gdy funkcjonalne pole do wprowadzania danych utworzy InputConnection, tryb pisma odręcznego stylu jest uruchamiany.

Rysunek 4. Przekazywanie danych wejściowych rysikiem ze statycznego elementu interfejsu użytkownika do pola do wprowadzania tekstu.

Material Design

Biblioteka com.google.android.material.search udostępnia klasy SearchBar i SearchView, które ułatwiają implementację zastępczego wzorca interfejsu użytkownika.

Widoki zastępcze i widoki wyszukiwania funkcjonalnego są połączone z widokiem danych setUpWithSearchBar().

Przekazywanie dostępu do pisma odręcznego jest konfigurowane w bibliotece materiałów bez konieczności dodatkowego programowania w aplikacji.

Zakładaj się na powierzchnie do rysowania

Jeśli aplikacja ma powierzchnię do rysowania z nałożonym na nią polem tekstowym, być może trzeba będzie wyłączyć pismo odręczne rysikiem, aby umożliwić użytkownikowi rysowanie. Zobacz setAutoHandwritingEnabled().

Testowanie

Pismo odręczne rysikiem jest obsługiwane na urządzeniach z Androidem 14 i nowszym wyposażonym w zgodne urządzenie wejściowe rysikiem oraz z edytorem metod wprowadzania (IME), który obsługuje interfejsy API pisma odręcznego rysikiem w Androidzie 14.

Jeśli nie masz urządzenia wejściowego rysika, wykonaj symulację wprowadzania rysika na dowolnym urządzeniu z dostępem roota (w tym emulatorami) za pomocą tych poleceń Android Debug Bridge (adb):


// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start

// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true

Jeśli używasz urządzenia, które nie obsługuje stylu, użyj Gboard w wersji beta do testów.

Dodatkowe materiały