Estoy usando onKeyListener para obtener los eventos onKey. Funciona bien con el teclado normal. Pero no funciona con el teclado suave. Solo puedo obtener eventos de tecla para números y no alfabetos. ¿Hay alguna solución para resolver esto? Cualquier tipo de ayuda será muy apreciada.onKeyListener no funciona con el teclado virtual (Android)
Respuesta
No creo que se llame a OnKeyListener en absoluto con el teclado del software. Tiene algo que ver con que el teclado del software sea un dispositivo IME y los dispositivos IME posiblemente sean cosas distintas de los teclados. Sin embargo, parece hacer que onKeyListener sea bastante inútil, ya que solo funciona en teléfonos con teclados de hardware. Trabajé alrededor de este problema recientemente usando TextWatcher en el campo EditText en mi actividad en lugar de utilizar OnKeyListener.
Intenté usar TextWatcher, pero necesito los eventos KeyUp y KeyDown para cada tecla presionada. Textwatcher me acaba de dar el evento clave. –
No creo que sea posible escuchar KeyUp y KeyDown desde el teclado del software. –
onKeyListener funcionó a la perfección en Android 1.5 mediante el teclado en pantalla
Desde Android 1.6 en adelante las teclas de caracteres y números no van a través del evento OnKey, sin embargo, la tecla DEL hace
frustrante
Este parece ser específico del dispositivo. Puedo confirmar que esto funciona en Xoom y Acer A100. Sin embargo, el Samsung Galaxy Tab Plus solo activa el evento para los botones que no son de carácter. (Todos los dispositivos ejecutan Honeycomb)
Me salvé esto al poner al oyente en su propio método y llamarlo nuevamente después de la primera vez. En el onCreate I invoco setKeyListenerForEnter();
Entonces, aquí está el método:
setKeyListenerForEnter public void() {
final EditText search_entry = (EditText) findViewById(R.id.search_entry);
search_entry.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
getSearchResults(v);
setKeyListenerForEnter();
return true;
}
return false;
}
});
}
No estoy seguro si esto es una solución mejor que manipule el teclado IME en sí, pero es una solución .
Esto es probablemente estúpido, pero así es como funciona Android en este momento.
La documentación indica que los eventos clave solo se propagarán para las pulsaciones de tecla de hardware, no para el software.
Los fabricantes de dispositivos están siendo desalentados para propagar eventos de teclado a través de oyentes clave, aunque depende completamente del fabricante respetar eso o tratar realmente los teclados blandos y duros con los mismos términos.
A partir de Android 4.2.2, el sistema Android por sí solo no admitirá los eventos clave de alimentación para los teclados suaves en absoluto, por lo que incluso los fabricantes no podrán elegir su camino.
Por lo tanto, la única opción infalible aquí es implementar su propio IME (teclado virtual), y manejar las teclas usted mismo.
TextWatcher se puede utilizar principalmente para reemplazar los oyentes clave, sin embargo editText.setText (...); también activará los eventos de TextWatcher, por lo que si uno está interesado solo en las claves mecanografiadas, probablemente TextWatcher tampoco sea una solución.
Tenga cuidado al usar TextWatcher con AutocomleteTextView o EditText. No modifique el texto en el contenido de AutocompleteTextView/EditText desde los eventos de TextWatcher, ya que de lo contrario lo más probable es que termine en un ciclo infinito de eventos/escucha.
Espero que esto ayude a aclarar las opciones disponibles, pero lamentablemente no proporciona una solución de trabajo.
Decepcionante que Google haya omitido este importante aspecto de su IU.
setFocusableInTouchMode(true); //Enable soft keyboard on touch for target view
setFocusable(true); //Enable hard keyboard to target view
ejemplo:
public class CanvasView extends View{
public CanvasView(Context c){
super(c);
//enable keyboard
setOnKeyListener(new KeyBoard());
setFocusable(true);
setFocusableInTouchMode(true);
}
}
¿Podría darnos un ejemplo de cómo se puede usar este código? Lo intenté ahora y parece que no funciona. – Simon
CanvasView clase pública se extiende Ver { \t \t CanvasView pública (Contexto c) { \t \t super (c); \t \t \t \t // permitir teclado \t \t setOnKeyListener (nuevo teclado()); \t \t setFocusable (verdadero); \t \t setFocusableInTouchMode (true); \t}} // habilitar el teclado en canvasView – user3309567
- 1. onKeyListener no funciona en el teclado virtual
- 2. OnKeyListener no funciona
- 3. Tecla de captura presionada con el teclado virtual en Android?
- 4. El teclado de Android no funciona
- 5. Extienda el teclado virtual de Android
- 6. Eclipse Android Emulator - Teclado no funciona
- 7. Android ViewPager muestra el teclado virtual en el lugar equivocado
- 8. ¿Por qué el teclado virtual no se va?
- 9. Código clave para Android minimice el botón del teclado virtual
- 10. Ocultar el botón del micrófono Teclado virtual de Android
- 11. Android: ¿por qué mi OnKeyListener() no se llama?
- 12. ¿Puedo usar el teclado virtual sin EditText?
- 13. Teclado virtual de Android encienda el bloqueo de mayúsculas
- 14. Detectando cuando el usuario ha descartado el teclado virtual
- 15. No quiero que el teclado virtual se muestre automáticamente en el inicio: Android
- 16. El teclado de Visual Studio no funciona
- 17. Android - Obtener la tecla del teclado presione
- 18. Botón para mostrar el teclado virtual?
- 19. Ventana emergente arriba Teclado virtual
- 20. Cerrar el teclado virtual en el botón presione
- 21. Mostrar el teclado virtual para el cuadro de diálogo
- 22. Knockout.js valueUpdate no funciona cuando el usuario usa el teclado
- 23. ¿Cómo se muestra el teclado virtual de un servicio?
- 24. android: Cómo evitar el cambio de tamaño de la ventana cuando se muestra el teclado virtual
- 25. Android cerrar el teclado
- 26. El teclado de Android oscurece EditText
- 27. Mostrar el teclado virtual en la activación de la barra de acciones de búsqueda con SearchView
- 28. Mostrando el teclado virtual de Android cuando un campo es .focus() 'd using javascript
- 29. Cómo deshabilitar por completo el teclado virtual para todas las entradas en Android webview
- 30. Ocultar el teclado virtual en la actividad sin operaciones de teclado
Suena raro si usted está recibiendo algunos caracteres pero no otros desde el teclado en pantalla. ¿Puedes publicar el código de tu oyente y dónde lo estás adjuntando? –
public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.login_screen); emailTxt = (EditText) findViewById (R.id.email); emailTxt.setOnKeyListener (nueva OnKeyListener() { \t \t \t OnKey pública booleano (Ver v, int keyCode, evento KeyEvent) \t \t { \t \t \t Log.i ("Key Value", de cadena. valueOf (código de clave)); \t \t}); } –
Solo estoy leyendo las claves por ahora. –