2012-08-15 11 views
5

Desidero sovrascrivere il pulsante Indietro quando viene visualizzata la tastiera software. Fondamentalmente quando si preme il pulsante Indietro, voglio che la tastiera venga chiusa e voglio aggiungere del testo a qualsiasi cosa l'utente abbia digitato in quel campo di testo di modifica. Quindi in pratica ho bisogno di sapere quando la tastiera viene chiusa. Dopo aver cercato in giro, mi sono reso conto che non esiste alcuna API per questo, e che l'unico vero modo per farlo sarebbe quello di rendere la classe EditText.Personalizzato Android Modifica testo e pulsante indietro sovrascrivi

Così ho creato il mio classe EditText ed esteso EditText come questo

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() 
    { 

    } 

} 

Ho anche aggiunto questo metodo

@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); 
     } 

Ora, questo metodo non ignorare il pulsante Indietro, si chiude la tastiera, ma non so come passare il testo nel campo EditText. Qualcuno sa come lo farei?

Un'altra domanda veloce, qualcuno sa perché questo metodo viene chiamato due volte? Come potete vedere per ora, ho aggiunto un messaggio di logcat veloce per testarlo, ma quando premo il pulsante Indietro, lo stampa due volte, qualsiasi motivo per cui lo farebbe?

Qualsiasi aiuto sarebbe molto apprezzato !!

risposta

5

Ciò è dovuto al fatto che dispatchKeyEventPreIme viene chiamato sia su ACTION_DOWN e ACTION_UP.
È necessario elaborare solo quando si preme KEY down. Così utilizzare

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

Edit: per la prima domanda che si potrebbe fare

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

in dispatchKeyEventPreIme

+0

Ah, stupido, avrei dovuto rendermene conto. Ma riguardo alla mia altra domanda. Sai come passarei il testo al campo EditText quando la tastiera viene chiusa? – AdamM

+0

controlla la modifica. – nandeesh

+0

Una soluzione così semplice. Grazie mille, funziona perfettamente !!! – AdamM

3

Perché due volte? Probabilmente il metodo è chiamato su premere giù e su evento.

Problemi correlati