5

Ho un edittext che deve funzionare come il campo di testo in iOS. Quando faccio clic su di esso, dovrebbe diventare modificabile altrimenti dovrebbe essere disabilitato. Supponiamo che l'utente desideri modificare un certo valore e quando preme il pulsante Indietro, insieme alla tastiera, si deseleziona e si desidera che l'edittoxt venga disabilitato per la modifica.Rileva eliminazione evento tastiera in Android

Tutto quello che sto usando è il metodo setCursorVisible (true) e setCursorVisible (false). Ho provato a utilizzare gli eventi keyCode ma non stanno aiutando. Questo è quello che ho provato fino ad ora:

@Override 
    public void onBackPressed() { 
// Had the InputMethodManager service here.. 
     if(imm.isAcceptingText()) 
     { 
      Toast.makeText(ProfileActivity.this,"working",Toast.LENGTH_SHORT).show(); 
     } 
else { 
      super.onBackPressed(); 
      Toast.makeText(ProfileActivity.this,"back pressed called",Toast.LENGTH_SHORT).show(); 
     } 
    } 

Anche provato a ignorare l'evento keyDown.

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     //replaces the default 'Back' button action 
     if(keyCode==KeyEvent.KEYCODE_BACK) 
     { 

      Log.d("123","called,called"); 
      return true; 

     } 
     return super.onKeyDown(keyCode, event); 
    } 

risposta

13

Come su creating a subclass of EditText and overriding its onKeyPreIme method

/** 
* This class overrides the onKeyPreIme method to dispatch a key event if the 
* KeyEvent passed to onKeyPreIme has a key code of KeyEvent.KEYCODE_BACK. 
* This allows key event listeners to detect that the soft keyboard was 
* dismissed. 
* 
*/ 
public class ExtendedEditText extends EditText { 

    public ExtendedEditText(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

    } 

    public ExtendedEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    public ExtendedEditText(Context context) { 
     super(context); 

    } 

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
      dispatchKeyEvent(event); 
      return false; 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

} 
+0

@Override pubblico onKeyPreIme booleana (int keyCode, evento KeyEvent) { se (keyCode == KeyEvent.KEYCODE_BACK) {// utente ha premuto il tasto Indietro. Quindi nascondi la tastiera InputMethodManager mgr = (InputMethodManager) context.getSystemService (Context.INPUT_METHOD_SERVICE); mgr.hideSoftInputFromWindow (this.getWindowToken(), 0); // TODO: Nascondi la vista mentre lo fai nella tua attività } return false; } – AndroidMech

+0

Ho provato a usare questo ... ma l'attività è terminata non appena viene premuto il tasto indietro. Voglio che l'attività venga completata la seconda volta che torno indietro .. Sul primo backpress, chiudi tastiera e setCursorVisible (false) è quello che mi aspetto – AndroidMech

+1

Intendi questo: http://stackoverflow.com/questions/8430805/android-clicking-twice-the-back-button-to-exit-activity? – Slartibartfast