Eingabe mit Eingabestift in Textfelder

Mit Android 14 (API-Level 34) und höher können Nutzer mit einem Eingabestift in jedes Texteingabefeld in jeder App schreiben. Android-Texteingabefelder, einschließlich EditText-Komponenten und WebView-Textwidgets, unterstützen standardmäßig die Eingabe per Eingabestift.

Wenn für Ihre Anwendung jedoch benutzerdefinierte Texteingabefelder erforderlich sind (siehe Benutzerdefinierte Texteditoren) oder ein komplexes Layout mit Texteingabefeldern hat, die eine Zeichenfläche überlagern, müssen Sie Ihre App anpassen.

Abbildung 1: Handschriftliche Eingabe mit einem Eingabestift.

EditText

Unter Android 14 und höher ist die Eingabe des Eingabestifts standardmäßig für alle EditText-Felder aktiviert. Der Handschriftmodus wird für EditText gestartet, wenn innerhalb der handschriftlichen Ansicht der Ansicht eine Bewegung des Eingabestifts erkannt wird.

Die Handschriftgrenzen umfassen einen vertikalen Abstand von 40 dp und einen horizontalen Abstand von 10 dp um die Ansicht. Passen Sie die Handschriftgrenzen mit setHandwritingBoundsOffsets() an. Deaktivieren Sie die Handschrift mit setAutoHandwritingEnabled(false).

Eingabefeld mit umgebendem Rechteck, das die Grenzen für die Erkennung von Eingabestiftbewegungen angibt.
Abbildung 2. Handschriftliche Grenzen von EditText Feldern.

Eingabedelegierung

Apps können Platzhalter-UI-Elemente anzeigen, die wie Texteingabefelder aussehen, tatsächlich aber nur statische UI-Elemente ohne Texteingabefunktion sind. Ein gängiges Beispiel sind Suchfelder. Durch Tippen auf das statische UI-Element wird ein Übergang zu einer neuen UI ausgelöst, die ein funktionales Texteingabefeld für die Eingabe enthält.

Abbildung 3: Eingabedelegierung vom statischen UI-Element in ein Texteingabefeld.

Eingabedelegierung für Eingabestift

Verwenden Sie die APIs zur Handschriftdelegierung, um die Eingabe mit Eingabestift mit dem Eingabestift zu unterstützen (siehe setHandwritingDelegatorCallback() und setIsHandwritingDelegate()). Das UI-Element für Platzhalter ist so konfiguriert, dass Handschrift an ein funktionales Eingabefeld delegiert wird, z. B.:

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);
}

Durch die Bewegung des Eingabestifts über der Ansicht des Platzhaltertexteingabefelds wird der Callback ausgelöst. Der Callback löst den UI-Übergang aus, sodass das funktionale Eingabefeld angezeigt und fokussiert wird. Die Callback-Implementierung entspricht normalerweise der Implementierung eines Klick-Listeners für das Platzhalterelement. Wenn durch das funktionale Eingabefeld ein InputConnection erstellt wird, wird der Handschriftmodus für Eingabestifte gestartet.

Abbildung 4: Eingabedelegierung des Eingabestifts vom statischen UI-Element zum Texteingabefeld.

Material Design

Die Bibliothek com.google.android.material.search bietet die Klassen SearchBar und SearchView, um die Implementierung des UI-Musters für Platzhalter zu vereinfachen.

Platzhalter- und funktionale Suchansichten sind mit setUpWithSearchBar() verknüpft.

Die Delegierung der Handschrift wird in der Materialbibliothek konfiguriert, ohne dass zusätzliche Entwicklungen in Ihrer App erforderlich sind.

Zeichenflächen überlappen

Wenn Ihre App eine Zeichenfläche mit einem Textfeld hat, die die Oberfläche überlagert, müssen Sie möglicherweise die Handschrift mit dem Eingabestift deaktivieren, damit der Nutzer zeichnen kann. Siehe setAutoHandwritingEnabled().

Testen

Die Eingabestift-Handschrift wird unter Android 14 und höher mit einem kompatiblen Eingabestift-Eingabegerät und einem Eingabemethoden-Editor (IME), der die Android 14 Stylus Handschrift-APIs unterstützt, unterstützt.

Wenn Sie kein Eingabegerät für den Eingabestift haben, simulieren Sie die Eingabe mit dem Eingabestift auf jedem Gerät mit Root-Zugriff (einschließlich Emulatoren) mit den folgenden ADB-Befehlen (Android Debug Bridge):


// 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

Verwende zum Testen die Gboard-Betaversion, wenn du ein Gerät verwendest, das keinen Eingabestift unterstützt.

Weitere Informationen