Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   ¿Se puede bloquear el taclado predictivo POR CODIGO? (https://www.clubdelphi.com/foros/showthread.php?t=91767)

jhonalone 20-04-2017 23:04:51

¿Se puede bloquear el taclado predictivo POR CODIGO?
 
Hola de nuevo, amigos.
Esta es la pregunta. No he encontrado respuesta.
¿Alguien sabe cómo hacerlo?.

Gracias. Sé que soy muy pesado.

Saludos.

Neftali [Germán.Estévez] 21-04-2017 10:09:13

No creo que tengas acceso directamente a esta característica desde las clases de Delphi.

Yo revisaría si el SDK de Android te permite hacerlo y una vez que encuentres esa posibilidad tratar de importar las clases de Java para tener acceso a ella.
Aquí se habla un poco de este tema)

jhonalone 21-04-2017 16:02:17

Gracias, Germán.

He visitado tu página, y he seguido tus explicaciones (en lo que he podido)
He estado buscando alguna librería que me pudiera dar alguna luz sobre el asunto.

He encontrado dos que parece que podrían ayudarme (Androidapi.Configuration.pas y Androidapi.JNI.InputMethodService.pas)

No he encontrado nada sobre el teclado predictivo (o no he sabido verlo)

La verdad es que mis conocimientos de programación no me permitirían tampoco saber cómo utilizarlo, (en realidad sólo soy un aficionado, aunque llevo programando mucho tiempo desde TurboPascal hasta Delphi no tengo estudios de informática)

Gracias por tu interés.
Saludos.

dec 21-04-2017 18:42:56

Hola a todos,

Me surge una duda, a ver si puedes ayudarme: ¿quieres deshabilitar el teclado que aparece cuando se pulsa sobre una casilla de edición o quieres deshabilitar cierta característica del teclado (la "predicción")? En todo caso, ¿podrías detallar un poco el contexto del asunto? Por ejemplo, si fuese que quieres deshabilitar el teclado en una casilla de edición, ¿tal vez bastaría con deshabilitarla? O bien mostrar la información en otro control que no sea una casilla de edición...

jhonalone 21-04-2017 20:50:03

Hola, Dec.
Quizá no me haya explicado bien.
Lo que quiero inhabilitar es la opción de que al ir tecleando, se te sugieran palabras que completan, o que son parecidas al texto que estás tecleando en la última palabra. Por ejemplo: si has tecleado "Esta es mi ca", lo que yo entiendo por teclado predictivo, consiste en que en la línea que está pegada al teclado propiamente dicho, se te ofrecen, normalmente, tres alternativas, para completar la palabra, que podrían ser en este ejemplo | "casa" | "capa" | "cama" |, que cumplen la finalidad de que con un toque sobre una de ellas, Android completa la palabra sin necesidad de que termines de teclear las letras que te faltan. En los Ajustes del terminal, se puede llegar a esta opción "Idioma y entrada de texto" o Idioma e introducción" o algo similar, (dependiendo de la versión de Android) después seleccionando "Teclado Samsung" (en mi caso) y a continuación "Texto predictivo".

Siento no haberme hecho entender.
Quizá debía haber dicho "Texto predictivo" donde dije "Teclado predictivo"
Mis disculpas.

El contexto viene relacionado con mi anterior post (No resuelto). Problema con TMemo en Android 6.0.1
Un saludo.

dec 22-04-2017 12:38:06

Hola a todos,

Te explicaste perfectamente jhonalone, simplemente, a mí me quedaba alguna duda. Mucho me temo que no voy a poder ayudarte, sino es diciendo que, en efecto, parece que tienes que cambiar la configuración del sistema. Ahora bien, yo creo que deberías mirar por otra solución que no fuese la dicha. En primer lugar, tal vez no puedas, sencillamente, cambiar la configuración del sistema. En segundo lugar, tal vez al usuario no le hiciese mucha gracia. En tercer lugar, pareciera que tu problema es otro, es decir, no tiene que ver con el texto predictivo, sino con el "input" que recibe el control "Memo" que utilizas. Creo que deberías mirar de solucionar este problema concreto, olvidándote de la "predicción" del teclado, sencillamente, porque eso es algo que debería ser indiferente para tu programa, que debería recibir el "input" del teclado correspondiente sin más ni más.

Sé que no te ayudo en absoluto, pero, personalmente, creo que la posible solución no pasa por cambiar la configuración del sistema, es decir, por tratar de evitar la "predicción" del teclado.

jhonalone 22-04-2017 15:32:38

Gracias, David por tu interés.

El problema no es el "input" del TMemo, pues no he configurado nada raro. Y si es del "input" es el componente el que desvirtúa la entrada del texto predictivo. ¡Ojo, a partir de la versión 6 de Android, y no de la que viene de fábrica, como habrás leído en mi otro post!

El problema comenzó a surgir con cierta actualización "Crítica" que prácticamente me obligó a hacer el terminal. No he tenido ocasión de probarlo en otro terminal con la misma versión o posterior.

A ver si puedo hacer un vídeo y lo subo a Youtube para que se pueda ver claramente el problema.

Lo que me extraña es que nadie me haya confirmado que le está pasando lo mismo... ¿Podría ser un problema de mi terminal en concreto...?

Voy con el vídeo.
Saludos.

dec 22-04-2017 15:47:31

Hola a todos,

Pero sigue pareciendo que la solución no pasa por evitar el "teclado predictivo". La solución pasa por averiguar porqué la entrada que recibe el componente "Memo" es errónea, si esto es algo que tiene que ver con el componente para Delphi, si tiene solución, etc. Pero olvidándose de desactivar de algún modo el "teclado predictivo" por lo que he comentado más arriba: para empezar, porque igual no le hace ninguna gracia al usuario, puesto que además una aplicación para Android, si no me equivoco, tampoco podrá volver a activar dicha opción, pues su cierre, por ejemplo, no depende del usuario, sino del propio sistema operativo. En definitiva, estaríamos cambiando una opción que luego no podríamos sencillamente volver a cambiar para dejarla como estaba.

Si adjuntas por aquí tu aplicación (APK) quizás podríamos probarla en nuestros teléfonos para ver su comportamiento.

jhonalone 22-04-2017 18:28:15

Bien, David.
En lo de activar y desactivar el texto predictivo, no sé si se podrá poner, como en Delphi para Windows, en el evento de cierre de la aplicación, restituir los valores, ni sé si esto funcionaría en Android.

He preparado un vídeo con el comportamiento del TMemo y del TEdit, pues el problema es común para ambos. Podeis verlo aquí.

Intento subir el archivo APK aquí.

No puedo subir el archivo APK.
Mensaje: "Project1.zip:
Tu archivo de 6,66 MB bytes excede el límite del foro de 293,0 KB para este tipo de archivo."

Pero vamos es un proyecto tan simple como un TMemo, u TEdit y un Botón para salir.

Saludos.

dec 22-04-2017 19:43:18

Hola a todos,

Acabo de ver el vídeo, y, en efecto, parece que hay cierto comportamiento "extraño". Sin embargo, después de ver el vídeo, como digo, me gustaría comentar lo siguiente. Creo que no deberías preocuparte en absoluto de este problema. Lo digo completamente en serio. A no ser que tu aplicación sea extremadamente rara, yo seguiría adelante sin más. ¿Por qué? Muy sencillo. El comportamiento que muestra el "teclado predictivo" no me parece único para los componentes de Delphi. Personalmente, no uso el "teclado predictivo" en mi móvil, y, seguramente otras personas tampoco lo usan.

Ahora bien, suponiendo que usas el "teclado predictivo", creo que debes o puedes asumir este tipo de "rarezas". No sé si tiene solución, pero, tal vez sea el comportamiento normal de dicho teclado, y, por lo tanto, es inútil que tú te preocupes de este asunto, porque, no vas a poder sino "parchear" algo que acaso esté funcionando como se espera. Precisamente, yo no uso este tipo de teclados, porque, su comportamiento no me gusta, justamente, por lo que muestras en el vídeo: muchas veces, en lugar de ayudar resultan un incordio, y, por otro lado, tal vez sea menester "aprender" a usarlo.

Insisto en que mi respuesta es completamente seria después de haber visto su vídeo. Al fin y al cabo, su programa espera una entrada. El usuario no es tonto, y, si, por ejemplo, se le pide una dirección de correo, creo que en su programa (y también acaso en un posible servidor) dicha entrada debe ser validada en todo caso. El usuario debe ingresar un correo, y, el programa espera un correo. Si hay "rarezas" que vienen de un "teclado predictivo" o cualquier otro motivo, lo único que yo haría sería, en el caso de no poder validar la dirección de correo (o cualquier otra entrada), sería advertir al usuario.

Como digo, el usuario verá que está ingresando algo mal, y, por supuesto, lo corregirá, si es que realmente quiere usar el programa en cuestión.

P.D. Para otra vez, tal vez le interese echar un vistazo a la aplicación Mobizen. Esta aplicación cuenta con un "cliente" que puede instalarse en Android, por ejemplo, y, un "servidor" que se instala y ejecuta en Windows. Ambas aplicaciones permiten "conectar" el teléfono al ordenador, de modo que podemos ver la pantalla del teléfono en el ordenador, siendo ideal, por ejemplo, para hacer algún tipo de video como el que has hecho, pero, usando un teléfono de "verdad" y no un emulador.

P.D.2. En Windows tal vez podríamos estar pendientes de algún mensaje para cuando se cerrase nuestra aplicación. En Android no es exactamente así, pero, creo que antes hablé demasiado. Es decir, tal vez podríamos aprovechar el mensaje "On Background" (creo que se llama así) para volver atrás los posibles cambios hechos en cierta configuración del sistema. Sin embargo, sigo sin ver esto una buena idea por varios motivos. Si hay que cambiar la configuración del sistema, tal vez sería bien decírselo al usuario para que él mismo lo hiciese.

jhonalone 22-04-2017 21:28:57

Gracias de nuevo por tu interés y tus consejos, David.
Haré algunas puntualizaciones.

1.- A mí tampoco me gusta usar el texto predictivo, pero este comportamiento del terminal, sólo lo he visto en este terminal y en esta versión después de actualizar. Antes se comportaba normalmente, es decir no duplicaba la última palabra.

2.- Como tú bien sabes, cuando se hace una aplicación, se trata de facilitar todo lo posible al usuario, evitándole acciones innecesarias para él y evitando la mala imagen que esto produce. Claro que había pensado en poner el aviso al usuario. Fue lo primero que pensé. Es lo más fácil para mí. Pero yo tengo la fea costumbre de hacer mis aplicaciones para que puedan ser utilizadas por usuarios "como si fueran tontos". Esto, como sabes, implica mucho más trabajo para el programador.

3.- Ya estoy trabajando en un "parche" para resolver este problema. No sé si lo conseguiré. Si lo hago, lo publicaré en el foro para quien pueda tener el mismo problema que tengo yo.

4.- Según mis apreciaciones iniciales, todo apunta a la interacción entre Delphi y Android. Es decir, que Delphi está construido sobre unas bases de Firemonkey/Android, que ya han sido modificadas. (Vuelvo a decir: "tal vez es mi terminal el único que falla..." Ya veremos...)

5.- Respecto a tu primer P.D., he entrado en el link y el programa no es muy distinto del que yo he usado.que se puede bajar gratuitamente aqui.

6.- Respecto a tu segundo P.D.2, me gustaría saber en qué consiste esto de "On Background" o algo parecido a lo que te refieres. Yo usaría lo que estaba usando en Windows, o sea el evento "OnDestroy" de la Unit principal, que en windows me ha funcionado siempre.

Saludos.

AgustinOrtu 22-04-2017 22:53:58

Pues yo opino lo mismo que jhonalone. Esto es un error de Delphi, ya que FMX provee una mala implementacion. Debe ser corregido por Embarcadero. Y los usuarios esperan un comportamiento determinado que todas las aplicaciones de la plataforma, mas o menos, siguen un mismo lineamiento.

A mi me sacas el texto predictivo y lanzo el telefono por la ventana, ya que no se escribir de otra manera; es mas yo uso la escritura gestual, no tipeo caracter a caracter. Seria totalmente estupido tener que modificar la configuracion del sistema, ya sea programaticamente o manualmente.

Esto me recuerda a las aplicaciones Windows que modifican la configuracion regional del sistema, y algunas hasta sin preguntar

Ahora, porque parece que jhonalone va "contra la corriente" y quiere sacar el texto predictivo? Pues simple, volvemos al primer punto, es un parche o workaround para que su aplicacion pueda funcionar

No he podido encontrar mucha mas informacion en la web. A mi lo unico que se me ocurre es que interceptes a mas bajo nivel los mensajes que le van llegando al memo, aunque no es tarea facil, ya que requiere de conocimientos de como funciona FMX, como se conecta con Android, y por supuesto tambien, como funciona Android internamente

jhonalone 22-04-2017 23:35:42

Gracias, Agustín.
Por un tiempo, he pensado que estaba SOLO contra el mundo.
Si tienes oportunidad, me gustaría que comprobaras en un terminal con 6.0.1 o superior reproduciendo con DELPHI DX Seattel lo que comento. Es crear una aplicación Multiplataforma, con un TMemo, un TEdit y (Si quieres) un botón para cerrarla. No te llevará más de 5 min. en total.
Luego me cuentas.
¿Has visto el vídeo?
Saludos.

dec 23-04-2017 10:09:41

Hola a todos,

Tal vez sea como vosotros decís. Sin embargo, espero que se entienda lo que yo quería decir:

1º El "teclado predictivo" no me gusta, ni a otras muchas personas, precisamente, por este tipo de cosas.

2º No es la primera vez que veo un comportamiento cuando menos similar con este tipo de "teclados predictivos".

Pero más importante:

1º El usuario ha de saber lo que escribe en el programa, ¿no es cierto? De modo que, si el "teclado predictivo" se equivoca, ¿el usuario no lo verá? ¿Y no podrá verlo el programa (comprobando la entrada)?

2º Por lo demás, en efecto, si es un problema "introducido", si antes no se daba, entonces, ciertamente, habría que tratar de arreglar dicho problema: pero esto no pasa por cambiar la configuración del sistema, es decir, por "matar al perro".

jhonalone 23-04-2017 13:36:56

Completamente de acuerdo, David.

Pero no me negarás que es una molestia para el usuario, quien no sabe que puede ser un problema de la plataforma con la que se ha construido la aplicación, ni le importa. Sólo verá que la aplicación reacciona de un modo extraño y molesto, y ya que al ver otras aplicaciones que utilizan entradas de texto no tienen este problema, desmerecerá bastante nuestra la aplicación.

Personalmente creo que es un problema causado por Google al actualizar la versión.

Pero al afectar únicamente a las aplicaciones construidas con Delphi, creo que Embarcadero debería tomar cartas en el asunto y resolver la cuestión.

Mientras tanto, seguiremos "chapurreando" a ver si encontramos la forma de "parchear" el problema, aunque para ello tengamos que modificar la forma en que se recoge el texto en los componentes afectados, y aunque nos cueste escribir unas cuantas líneas extra de código en cada una de las entradas de texto de las aplicaciones que ya tenemos construidas, y las que vayamos a construir.

Será una "lata..." y una tarea que nos llevará bastante tiempo, pero si no hay otra cosa...

Sigo pensando que la solución más cómoda para nosotros, (y también la más elegante hasta encontremos otra mejor), sería bloquear el teclado predictivo mientras el usuario utiliza la aplicación. Mejor que dejarle que "se pelee" con un teclado que hace cosas raras (solamente) en nuestra aplicación.

Saludos a todos.

dec 23-04-2017 14:30:14

Hola a todos,

De todas formas, a ver si algún compañero puede compilar una pequeña aplicación de ejemplo que podamos probar. Tal vez el problema esté limitado a tu teléfono... o a cierta versión o actualización de Android. No digo que esto solucione nada, pero, al menos podrá averiguarse (más o menos) el posible alcance del problema. Y de todas formas me gustaría insistir en que acaso no deberíamos preocuparnos de este problema más de la cuenta, esperando, eso sí, una posible solución. Lo digo por esto:

Cita:

Será una "lata..." y una tarea que nos llevará bastante tiempo, pero si no hay otra cosa...
En efecto, llevará bastante tiempo arreglar el problema y también llevará bastante tiempo desarreglarlo... Por eso digo que igual es posible convivir con el problema... hasta que se arregle mediante el parche correspondiente, o bien con una solución muy general, que ya no nos lleve tanto tiempo "poner y quitar".

jhonalone 23-04-2017 15:41:30

Tienes razón, David.

¡¡¡¡Desearía con toda mi alma que fuera el problema de mi terminal!!!!

Un poco más arriba, en este post, ya lo sospeché yo.

Por éso ruego a todos los que tengáis una versión 6.0.1 o posterior que hagáis la prueba.

Vuelvo a decir son 5 minutos.

Una aplicación multiplataforma en blanco. Un TMemo. (Si quieréis un TEdit para comparar) y si quereis un botón para salir. Seleccionar plataforma Android. Compilar y probar.

Vamos estoy tardando más en explicarlo que en hacerlo. Y no te cuento si subo los ficheros en .zip y lo que se tarda en bajarlos y en descomprimirlos es más tiempo que en crear la aplicación.

Por mi parte, veré si algún conocido tiene esta versión o posterior. Lo probaré y os lo cuento.

Saludos a todos.

AgustinOrtu 23-04-2017 18:27:53

De todos modos ahora que lo pienso hay aplicaciones que para ciertos campos deshabilitan el texto predictivo, los más notables son los que se usan para ingresar mail y contraseñas. Probaste cambiar la propiedad del teclado virtual?

jhonalone 23-04-2017 19:43:12

Hola, Agustín.
Tienes razón, El TEdit tiene una propiedad password que cuando es true no muestra el teclado predictivo. Pero el TMemo no tiene esta opción. Esto demuestra que se puede omitir. Lo que no sabía es que el tipo de teclado EmailAddress omitía el texto predictivo.
Lo pruebo y te cuento.
Saludos.

jhonalone 23-04-2017 20:14:43

Probados todos los tipos de Teclado virtual que ofrece TMemo.
Solamente NamePhonePad, NumberPad y PhonePad ocultan el texto predictivo.
Esto nos vuelve a demostrar que Delphi puede ocultarlo. Ahora hay que saber cómo.
Saludos.


La franja horaria es GMT +2. Ahora son las 00:59:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi