7 votos

¿Por qué los métodos de introducción de texto suelen omitir la función de deshacer?

Estoy leyendo la documentación de recursos de mi teclado (uso MessagEase normalmente), y veo que se afirma:

MessagEase Screenshot

Tenga en cuenta que el Android no proporciona ninguna Deshacer .

Sin embargo, sé que esto no es realmente cierto -al menos, no de forma aparente- porque cuando se utiliza un teclado físico Ctrl + Z invoca undo sin problemas, y no requiere ninguna aplicación adicional/externa, es decir, funciona de forma nativa a través del PNP genérico (he utilizado las variedades de telnet, BT y RF, y todas ellas funcionan). Y sin embargo, misteriosamente, la función parece ser omitida intencionadamente (descargo de responsabilidad: no tengo pruebas que respalden esta conjetura).

De hecho, MessagEase ha ampliado las funcionalidades de entrada que incluyen controles de campos de formulario y controles de caracteres ASCII, y sin embargo la entrada Ctrl + Z resulta en un notdef salida de glifos en el mismo campo de formulario.

¿Por qué es así?

EDIT: Tenga en cuenta que me refiero a la conexión de un teclado físico a un dispositivo Android, estoy no comparando la UX de PC con la de Android.

0 votos

Es posible implementarlo con la interfaz TextWatcher

6voto

Jack Wade Puntos 231

Esta pregunta puede obtener mejores respuestas de los desarrolladores que de la comunidad de usuarios finales.

El framework de Android tiene una clase llamada UndoManager "para gestionar e interactuar con el estado global de deshacer de un documento o aplicación. Esta clase soporta tanto deshacer como rehacer..." . Y Android's EditText (que amplía la vista TextView y se utiliza comúnmente en las aplicaciones para obtener la entrada de texto del usuario) sí admite Deshacer y Rehacer operaciones desde Android 6 al menos. De hecho un desarrollador de ROMs puede mostrar estas opciones en el menú contextual de pulsación larga para cada app, como vemos Copiar , Pegar y Seleccionar todo que se muestran por defecto . Pero Deshacer / Rehacer siempre funcionan si el teclado virtual o físico puede enviar CTRL-Z y CTRL-SHIFT-Z eventos clave.

I ampliado CTRL- soporte de eventos en AnySoftKeyboard para aplicaciones no terminales. Así que cualquiera puede hacerlo. La razón por la que no lo hacen es puramente una cuestión de elección. No hay ninguna limitación técnica.

0 votos

Tenga en cuenta que el UndoManager clase a partir de Android 12 está restringido, por: developer.Android.com/about/versions/12/non-sdk-12#new-blocked También basado en: Android.googlesource.com/platform/development/+log/refs/heads/ parece una característica en estudio y en pausa/abandonada/oculta y se esperaba que los desarrolladores utilizaran TextWatcher tal vez para lanzar sus propias operaciones de deshacer/rehacer.

0 votos

@MorrisonChang las API ocultas se ocultan a las aplicaciones, no al framework. Así que las restricciones no SDK no se aplican a EditText / TextView . A partir de la última confirmación, tanto las operaciones de deshacer como las de rehacer son gestionadas completamente por estas clases del framework: Android.googlesource.com/platform/frameworks/base/+/ . Pero incluso si Google abandona el soporte (que no parece ser el caso hasta ahora), la ampliación de EditText para manejar los eventos clave y mantener el historial no será una gran tarea.

0 votos

No estoy seguro de a qué "desarrolladores" te refieres en tu primera línea frente a tu última línea, "desarrolladores del framework de Android" o "desarrolladores de terceros". Creo que mi punto era que la funcionalidad de deshacer / rehacer en TextView no se especifica claramente en la documentación oficial y sólo se menciona en la propiedad XML Android:allowUndo . El hecho de que un desarrollador de aplicaciones de terceros tenga que mirar el código fuente del framework no es nuevo, pero es menos "una cuestión de elección" que de "concienciación".

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X