¿Anular la tecla de eliminación en Android?

En general, solucioné el problema con estas líneas en dispatchKeyEvent:

byte[] cmdLeft = { (byte) 27, (byte) '[', (byte) 'D' }; byte[] cmdErase = { (byte) 27, (byte) '[', (byte) 'P' }; mSession.appendToEmulator(cmdLeft, 0, cmdLeft.length); mSession.appendToEmulator(cmdErase, 0, cmdErase.length); 

El único problema ahora es que si selecciono el editText y pulsa delete entonces se borrará un carácter pero dos aparecerán en la pantalla. Así que si escribo habilitar y pulsar borrar cambiará a enab pero lo que realmente se enviará es enabl

He pasado por encima de dispatchKeyEvent, y eso funciona. Si se selecciona editText, el terminal borra caracteres en serie ahora, por lo que es un buen paso. Sin embargo el problema principal todavía existe que si el terminal se selecciona, los pequeños rectángulos extraños se escriben en la pantalla en vez de suprimir un carácter. Bueno, uno está escrito, y si sigo presionando borrar se queda en esa caja, pero la próxima vez que escriba la cantidad de borrados que presione aparece como cajas. Es muy extraño …

Es como que es simplemente superado para el edittext y no para el terminal.

Pequeñas cajas extrañas en toda su gloria:

Introduzca aquí la descripción de la imagen

 public boolean dispatchKeyEvent(KeyEvent event) { if (event != null && event.getAction() == KeyEvent.ACTION_UP) { return false; } if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) { try { sendOverSerial("\b".getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return super.dispatchKeyEvent(event); }; 

Me estoy conectando a un emulador de terminal usando una biblioteca en androide, esto se conecta a un dispositivo serial (un interruptor) y me muestra datos enviados / recibidos. Puedo enviar datos a través de la conexión a través de un cuadro de texto debajo de la terminal o escribiendo en el propio terminal y pulsando entrar en el teclado en ambos casos. Sólo será un teclado suave que se utiliza. Si envío una cadena incorrecta estoy en un estado irrecuperable debido a no tener una implementación de clave de eliminación. Backspace en mi editTxt funciona bien, sólo quiero que funcione cuando el terminal está resaltado y estoy escribiendo en eso.

Por el momento, si presiono borrar un personaje de la caja extraña aparece y nada más sucede, me sale una excepción en el registro de algunas veces ( http://i.imgur.com/wMRaLPX.png ). Lo que quiero saber es cómo ir sobre cambiar la funcionalidad de las claves de borrar para que cuando lo presione puedo enviar un carácter de borrado como este, pero también conservar la capacidad de eliminar caracteres en el cuadro edittext, etc:

 sendOverSerial("\b".getBytes("UTF-8")) 

Esto envía un espacio posterior correcto, sólo necesito incorporarlo.

¿Pero el teclado suave no parece registrar pulsaciones de teclas? Sigo recibiendo un código de clave de 0 y sólo entrar funcionará.

Actualmente estoy probando https://stackoverflow.com/questions/4…62035_11377462 , pero cualquier otra sugerencia sería genial, ya que aproximadamente 10 sugerencias no han funcionado hasta ahora. Mi retroceso no se asociaría con un editText, sino con un terminal View. No puedo ni siquiera detectar la tecla de borrado que está siendo presionada.

Parece que el control de terminal que está utilizando debe consumir el KEYCODE_DEL en lugar de dejar que se propague a la ventana y debe enviar un char diferente al extremo remoto en lugar de \ b. Así que cuando el texto de edición está enfocado, dispatchKeyEvent está manejando la prensa, pero no la ve cuando el terminal tiene foco. ¿Ha confirmado que el manejador incluso está disparando a través de depurador cuando el terminal tiene foco? Usted no dijo qué biblioteca está utilizando para el terminal, pero me gustaría ver eso y ver si se puede establecer un controlador de clave o algo así.

No tengo ninguna experiencia con Android, y también voy a admitir que nunca he intentado implementar un vínculo de clave de borrado / retroceso. Sin embargo, si yo estaba tratando de hacer esto, y no sabía una buena implementación estándar puedo pensar en una solución que probablemente funcione bien. Hacer un enlace de clave para eliminar con un detector de acciones asociado. Haga que el receptor de la acción getText () salga de su campo de texto y guárdelo como String. Substring esa cadena para incluir todo excepto el último carácter. A continuación, utilice setText () para el campo de texto con la nueva cadena. Tipo de una forma manual de hacerlo, pero sin duda funcionaría.

Recomiendo capturar la cadena completa y enviarla de una vez, cuando el usuario presiona Enviar , como un programa de chat.

La solución era mover el método que escribió a la pantalla a otra clase, entonces todo funcionó bien.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.