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)

dec 24-04-2017 09:20:04

Hola a todos,

Cita:

Empezado por jhonalone (Mensaje 515824)
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.

Lamentablemente no puedo probar nada, porque, me quedé de momento en Delphi XE2. Por otro lado, creo que no es Delphi quien muestra el teclado predictivo, sino el propio sistema, en base al tipo de la casilla de edición. No es que Delphi diga "ahora no muestres el teclado", sino que el sistema, para ciertos tipos de casilla, no los muestra. Por ejemplo, estoy seguro de que si probamos con una aplicación HTML ocurrirá lo mismo, pero, no es que HTML ni el navegador oculten el teclado predictivo: si no me equivoco es el propio sistema quien se encarga de mostrarlo o no dependiendo del tipo de casilla de entrada.

dec 24-04-2017 11:01:41

Hola a todos,

En este hilo de StackOverflow se trata también de cómo evitar que Android muestre el teclado predictivo para ciertas casillas de edición. Tal vez ahí esté una posible solución, por ejemplo, si es posible editar cierto XML de la aplicación, bien en Delphi, bien fuera de Delphi. O bien tratar de cambiar el tipo de la casilla de edición con alguna "bandera" de las que se comentan en el hilo referido. El caso es que por ahí pueden ir los tiros: indicarle al sistema que, para esta o aquella casilla de edición, no queremos que se use el teclado predictivo.

AgustinOrtu 24-04-2017 12:01:59

Yo creo que sí es culpa de Delphi, porque en cualquier otra aplicación funciona bien. Probablemente estén mal implementandos los hook que escuchan los mensajes que el sistema operativo manda a la aplicación, y Delphi intercepta para escribir el texto que se introduce en el teclado en el Memo

La otra prueba sencilla es meter un componente web browser y probar que pasa en ese caso, aunque estoy convencido de que funcionará bien

jhonalone 24-04-2017 17:23:52

Hola de nuevo.
No sé si esta ayuda de Delphi la entendéis de la misma forma que yo:
Cita:

Enumeration used to control the type of onscreen keyboard to be displayed.

TVirtualKeyboardType is an enumeration used by controls that support the IVirtualKeyboardControl interface to control the type of onscreen keyboard to be displayed. These values might have different interpretations on different devices, but should generally follow these definitions:

Value Meaning
Alphabet
An alphanumeric keyboard for general text input.

On Android, the Alphabet keyboard type has no word completion/word suggestion. The keyboard looks the same as the Default keyboard, but without suggestions.

Default
An alphanumeric keyboard for general text input.

EmailAddress
An alphanumeric keyboard for entering Email addresses, typically with keys for . and @.

Bien, pues en mis terminales, (Todos Samsung, pero con distintas versiones), sigue apareciendo el teclado y las sugerencias cuando selecciono el KeyboardType en Alphabet. (¿...?)

Gracias, Dec, encontrar la página de StackOverFlow indica que has trabajado en el asunto. Pero no sé cómo cambiar las banderas (Flags) en Delphi.

Sigo trabajando, en encontrar un parche.

Saludos.

dec 24-04-2017 18:15:53

Hola a todos,

Hombre, esto que pones ahora parece que quiere ser la solución... o sea, usar el tipo "Alphabet" que mencionas. Justamente, parece usarse para eso, o, a lo menos podría servir... Sin embargo, no me extrañaría que los tipos de Delphi terminasen convirtiéndose en alguna de las cadenas que se mencionan en el hilo de StackOverflow enlazado arriba. Y ahí está el asunto que no sé si es posible: editar algún archivo XML de la aplicación, aunque sea después de haber sido compilada por Delphi, de modo que podamos cambiar el tipo de las entradas de texto por algunos de los sugeridos en el hilo de StackOverflow. Pero como digo no sé si esto es siquiera posible.

Tal vez podrías realizar una búsqueda por "Alphabet" entre los archivos de tu aplicación, a ver si lo encuentras, y, más importante, a ver dónde lo encuentras... bien buscar por cadenas como "InputType", a ver si eres capaz de averiguar dónde se determinan (si esto es así) los tipos de los controles de la aplicación, ya digo, con el fin de cambiarlos a algunos de los indicados en el hilo de StackOverflow. Estoy suponiendo que el "Alphabet" de Delphi tal vez se ha quedado obsoleto, en el sentido de que su "traducción" acaso no se use en las nuevas versiones de Android y sea menester usar otro.

Y mira... aquí surge otra posibilidad... seguirle la pista al tipo "TVirtualKeyboardType" y ver qué define y si usa cadenas... y si tal vez podríamos cambiar estas cadenas por otras que funcionen...

jhonalone 25-04-2017 13:07:00

Gracias de nuevo, David.

Cuando leí el hilo de StackOverfow que me comentaste, ya hice la búsqueda en las librerías que podían estar implicadas en el tema:
Androidapi.JNI.JavaTypes
Androidapi.JNIBridge
FMX.Memo
FMX.Types

Sobre todo en el última Unit, encontré referencias al teclado virtual, pero no vi, (o no supe ver) nada que me pudiera ayudar.

Buscaré dentro del mismo APK a ver qué pasa. A ver si encuentro alguna referencia a las banderas que indican en el mencionado hilo. El tipo "Alphabet", dede luego no lo oculta en ninguna versión que he probado.

Saludos.

jhonalone 25-04-2017 18:39:12

Pues tampoco.
He incorporado la directiva
Código:

<activity
android:name="com.embarcadero.firemonkey.FMXNativeActivity"

android:label="%activityLabel%"

android:inputType="text|textNoSuggestions"

android:configChanges="orientation|keyboard|keyboardHidden|screenSize"   
       
android:launchMode="singleTask"
>

en el fichero AndroidManifest.template.xml
He comprobado que el complilador la ha incorporado, tanto al fichero \Android\Debug\AndroidManifest.xml, como al fichero \Android\Debug\Project1\AndroidManifest.xml .

Pero al correr el programa sigue mostrando el texto predictivo.

Saludos.


La franja horaria es GMT +2. Ahora son las 18:23:23.

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