Warum verzichten Texteingabemethoden im Allgemeinen auf eine Undo-Funktion?

Ich lese die Ressourcendokumentation meiner Tastatur durch (ich verwende normalerweise MessagEase ) und sehe, dass dort Folgendes steht:

MessageEase-Screenshot

Bitte beachten Sie, dass Android kein Rückgängigmachen bietet .

Ich weiß jedoch, dass dies nicht wirklich wahr ist – zumindest nicht auf offensichtliche Weise – denn wenn eine physische Tastatur Ctrl verwendet wird, + wird problemlos Zaufgerufen und erfordert keine zusätzlichen/externen Anwendungen, dh es funktioniert nativ über generisches PNP ( undoIch habe Telnet-, BT- und RF-Varianten verwendet, die alle funktionieren). Und doch scheint die Funktion mysteriöserweise absichtlich weggelassen worden zu sein (Haftungsausschluss: Ich habe keine Beweise für diese Vermutung).

Tatsächlich verfügt MessagEase über erweiterte Eingabefunktionen, die Formularfeldsteuerelemente und ASCII-Zeichensteuerelemente umfassen, und dennoch führt die Eingabe von Ctrl+ Zzu einer notdefGlyphenausgabe in genau demselben Formularfeld.

Warum ist das so?

BEARBEITEN: Bitte beachten Sie, dass ich mich auf das Anschließen einer physischen Tastatur an ein Android-Gerät beziehe, ich vergleiche nicht PC mit Android UX.

Es ist möglich, es mit der TextWatcher-Schnittstelle zu implementieren

Antworten (1)

Diese Frage kann von Entwicklern besser beantwortet werden als von der Endbenutzer-Community.

Das Android-Framework hat eine Klasse mit dem Namen "zum Verwalten und Interagieren mit dem globalen Undo-Status für ein Dokument oder eine Anwendung. Diese Klasse unterstützt sowohl Undo als auch Redo..." . Und die Ansicht von Android (die erweitert wird und häufig in Apps verwendet wird, um Texteingaben vom Benutzer zu erhalten) unterstützt seit Android 6 die Vorgänge " Rückgängig " und "Wiederholen" . Tatsächlich kann ein ROM-Entwickler diese Optionen im Kontextmenü für jede App durch langes Drücken anzeigen, da wir Copy , Paste und Select All sehen , die standardmäßig angezeigt werden . Aber Undo / Redo funktionieren immer, wenn die virtuelle oder physische Tastatur Ereignisse senden und drücken kann.UndoManager EditTextTextViewCTRL-ZCTRL-SHIFT-Z

Ich habe die Ereignisunterstützung in AnySoftKeyboard für Nicht-Terminal-Apps erweitert . CTRL-Also kann jeder. Warum sie es nicht tun, ist eine reine Frage der Wahl. Es gibt keine technische Einschränkung.

@MorrisonChang versteckte APIs werden vor Apps versteckt, nicht vor dem Framework. Die Nicht-SDK-Einschränkungen gelten also nicht für EditText/ TextView. Seit dem letzten Commit werden sowohl Undo- als auch Redo-Vorgänge vollständig von diesen Framework-Klassen gehandhabt: android.googlesource.com/platform/frameworks/base/+/… . Aber selbst wenn Google die Unterstützung einstellt (was bisher nicht der Fall zu sein scheint), wird es EditTextkeine große Aufgabe sein, die Klasse zu erweitern, um wichtige Ereignisse zu behandeln und den Verlauf zu speichern.
Ich bin mir nicht sicher, auf welche „Entwickler“ Sie sich in Ihrer ersten Zeile im Vergleich zu Ihrer letzten Zeile beziehen, „Android-Framework-Entwickler“ oder „Entwickler von Drittanbietern“. Ich denke, mein Punkt war, dass die Funktion zum Rückgängigmachen/Wiederherstellen TextViewin der offiziellen Dokumentation nicht klar formuliert ist und nur durch die XML-Eigenschaft android:allowUndo angedeutet wird . Die Tatsache, dass ein Drittanbieter-App-Entwickler sich die Framework-Quelle ansehen muss, ist nicht neu, aber weniger „eine Frage der Wahl“ als „Bewusstsein“.
@MorrisonChang "Ich denke, mein Punkt war, dass die Funktion zum Rückgängigmachen / Wiederherstellen TextViewin der offiziellen Dokumentation nicht klar dargelegt ist . " Ja, das ist ein gültiger Punkt. Und mein Punkt ist, dass „ Android bietet kein Rückgängigmachen “ keine gültige Entschuldigung dafür ist, eine so kleine Funktion nicht bereitzustellen. Es ist eine Frage der Wahl des App-Entwicklers, obwohl das nichts Schlechtes ist.
Danke für die Auskunft! Könnten Sie näher erläutern, wann Sie gesagt haben: "Aber Rückgängig / Wiederherstellen funktioniert immer, wenn die virtuelle oder physische Tastatur STRG-Z- und STRG-UMSCHALT-Z-Tastenereignisse senden kann." Wie ich im OP erwähnt hatte, kann MessagEase diese Eingaben senden, aber es gibt nur eine notdefGlyphe aus.
Android's TextView/ EditTexthandhabt Undo/Redo-Ereignisse sicher; Ich habe die Links zum Quellcode bereitgestellt. "Wenn Sie eine physische Tastatur verwenden, wird Strg+Z undoproblemlos aufgerufen" . Dies bedeutet definitiv, dass Ihre virtuelle Tastatur nicht das richtige Tastenereignis sendet. So senden Sie diese Ereignisse: Ich habe den Link im letzten Absatz angegeben. Sie können ASK Keyboard einfach installieren und selbst testen: github.com/mirfatif/AnySoftKeyboard