2011-04-05 8 views
7

Tengo una EditarTexto que quiero controlar KeyEvents para, y tengo un oyente establecido de la siguiente manera:Android: teclas KeyListener para una EditarTexto que no reciben

mText = (EditText) this.findViewById(R.id.title); 
mText.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     final int view = v.getId(); 
     switch (view) { 
      case R.id.title: 
       Log.d(LOG_TAG, "key handled"); 
       break; 
     } 
     return false; 
    } 
}); 

Mi problema es que cuando el EditarTexto SE escrito usando el teclado virtual, la única pulsación de tecla que activa el registro es la tecla de retroceso. Comprobé que todas las demás pulsaciones de teclas ni siquiera están activando onKey(). Estoy seguro de que esto es algo simple, pero no encontré nada en SO que pareciera tratar con esto.

Gracias,

Paul

+1

De la documentación 'Las pulsaciones de teclas en los métodos de entrada suave no son necesarias para activar los métodos en este oyente, y de hecho se desalientan a hacerlo. El teclado predeterminado de Android no los activará para ninguna clave de ninguna aplicación que se dirija a Jelly Bean o posterior, y solo lo entregará para algunas pulsaciones de teclas a las aplicaciones dirigidas a Ice Cream Sandwich o versiones anteriores. Http://developer.android.com/reference /android/text/method/KeyListener.html –

Respuesta

15

Trate de usar addTextChangedListener(TextWatcher watcher) definido here con ella se puede manejar el físico y el teclado en pantalla. espero que ayude

+2

Eso es exactamente lo que estoy buscando, un comportamiento aún extraño en el oyente de claves, pero gracias por esto. –

+0

no hay problema, estoy contento de que haya ayudado :) – raukodraug

5

De la referencia en Android:

http://developer.android.com/reference/android/view/View.OnKeyListener.html

View.OnKeyListener

Class Overview de interfaz para una devolución de llamada que se invoca cuando un evento clave de hardware se envía a esta vista. La devolución de llamada se invocará antes de que se dé el evento clave a la vista. Esto solo es útil para teclados de hardware; un método de entrada de software no tiene la obligación de desencadenar este oyente.

¡Parece que OnKeyListener está diseñado expresamente para reaccionar a las teclas de HARDWARE solamente!

+0

Interesante - ¡buen descubrimiento! –

0

onKeyListener sólo funciona con:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

la pusieron en el método onCreate.

Cuestiones relacionadas