2012-08-15 11 views
5

Quiero anular el botón Atrás cuando se muestra el teclado virtual. Básicamente, cuando se golpea el botón Atrás, quiero que el teclado se cierre y quiero agregar texto a lo que haya escrito el usuario en ese campo de texto de edición. Entonces, básicamente, necesito saber cuándo se descarta el teclado. Después de buscar, me di cuenta de que no hay una API para esto, y que la única forma real de hacerlo sería crear tu clase EditText.Android personalizado Editar texto y botón de respaldo anular

así que creé mi propia clase EditarTexto y extendieron EditarTexto como esto

public class CustomEditText extends EditText 
{ 

    public CustomEditText(Context context) 
    { 
     super(context); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init() 
    { 

    } 

} 

También he añadido este método

@Override 
     public boolean dispatchKeyEventPreIme(KeyEvent event) 
     { 
      if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) 
      { 
       Log.v("", "Back Pressed"); 

          //Want to call this method which will append text 
          //init(); 
      } 
      return super.dispatchKeyEventPreIme(event); 
     } 

Ahora bien, este método no hace anular el botón de retroceso, se cierra el teclado, pero no sé cómo pasaría el texto al campo EditText. ¿Alguien sabe cómo haría esto?

También otra pregunta rápida, ¿alguien sabe por qué este método se llama dos veces? Como puede ver por el momento, he agregado un mensaje rápido de logcat para probar que funciona, pero cuando presiono el botón Atrás, se imprime dos veces, ¿por qué estaría haciendo esto?

¡Cualquier ayuda sería muy apreciada!

Respuesta

5

Esto se debe a que se llama al dispatchKeyEventPreIme en ACTION_DOWN y ACTION_UP.
Tendrá que procesar solo cuando presione KEY down. Así que utilice

if(event.getAction() == KeyEvent.ACTION_DOWN)

Editar: para la primera pregunta se podría hacer

setText(getText().toString() + " whatever you want to append"); 

en dispatchKeyEventPreIme

+0

Ah, tonto, debería haberme dado cuenta de eso. Pero con respecto a mi otra pregunta. ¿Sabes cómo pasaría texto al campo EditText cuando se descarta el teclado? – AdamM

+0

revisa la edición. – nandeesh

+0

Una solución tan simple. Muchas gracias, funciona perfectamente !!! – AdamM

3

Por qué dos veces? Probablemente se llame al método para presionar hacia abajo y hacia arriba el evento.

Cuestiones relacionadas