2010-11-13 16 views

Respuesta

13

La respuesta a esta pregunta debe ser doble. Está determinado por la forma en que se generó la clave. Si se presionó la tecla de hardware, ambos enfoques descritos a continuación son válidos. Si se presionó la tecla de software, depende del contexto real.

1.) Si la clave fue resultado de la presión sobre el teclado en pantalla que se obtuvo mediante pulsación larga de la tecla Menú:

Necesita anular cuidadosamente la siguiente función:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 
     case KeyEvent.KEYCODE_A: 
     { 
      //your Action code 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

2 .) Si su actividad contiene EditText, y se obtuvo un teclado de teclado, entonces el primer enfoque no funciona porque el evento de tecla ya fue consumido por EditText. Es necesario utilizar el texto cambiado Oyente:

mMyEditText.addTextChangedListener(new TextWatcher() 
{ 
    public void afterTextChanged(Editable s) 
    { 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    { 
     /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    } 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
    } 
); 
+0

¿Has probado la aproximación sugerida? ¿Fue útil? – Zelimir

+0

Esto solo captura eventos de teclas duras como la parte posterior y el menú, pero no eventos de teclas de entrada. – ozmank

+0

¿Estás seguro de eso? Funciona correctamente para mí también para cartas. ¿En qué teléfono has probado? – Zelimir

4

código Zelimir funciona si su versión ssoo es de hasta 2,3 Si tiene el código que se ejecuta en 2.3 que no funciona en absoluto, la manera de controlar las teclas de eventos en todo ssoo versiones con dispatchKeyEvent()

@Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     Log.d("hello", String.valueOf(event.getKeyCode())); 
     return super.dispatchKeyEvent(event); 
    } 

con esto, se puede controlar la tecla pulsada en una vista web o en cualquier lugar. El único error es que no puedes controlar el "botón de acción" ... no sé por qué.

1

Pruebe esto, esto funciona perfectamente bien.

@Override 
public boolean onKeyUp (int keyCode, KeyEvent event){ 
char c = (char) event.getUnicodeChar(); 
//Do something.... 
return super.onKeyUp(keyCode, event); 
} 
Cuestiones relacionadas