5

Ich habe einen Edittext, der wie das Textfeld in iOS funktionieren muss. Wenn ich darauf klicke, sollte es bearbeitbar sein, sonst sollte es deaktiviert werden. Nehmen wir an, der Benutzer möchte einen bestimmten Wert bearbeiten und wenn er die Zurück-Taste drückt, möchte ich zusammen mit der Tastaturabkürzung, dass der Editiertext zum Bearbeiten deaktiviert wird.Detect entlassen Tastaturereignis in Android

Alles was ich benutze ist die Methode setCursorVisible (true) und setCursorVisible (false). Ich habe versucht, keyCode-Ereignisse zu verwenden, aber sie helfen nicht. Das habe ich bisher probiert:

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

Auch versucht KeyDown Event zu überschreiben.

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

Antwort

13

Wie wäre es 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 public boolean onKeyPreIme (int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {// Benutzer Zurück-Taste gedrückt hat. So verstecken Sie die Tastatur InputMethodManager mgr = (InputMethodManager) context.getSystemService (Context.INPUT_METHOD_SERVICE); mg.hideSoftInputFromWindow (this.getWindowToken(), 0); // TODO: Verbergen Sie Ihre Ansicht, wie Sie es in Ihrer Aktivität tun } return false; } – AndroidMech

+0

Ich habe versucht, dies zu verwenden ... aber die Aktivität wird beendet, sobald die Taste gedrückt wird. Ich möchte, dass die Aktivität beim zweiten Drücken beendet wird. Beim ersten Zurückdrängen, Tastatur schließen und setCursorVisible (false) ist was ich erwarte. – AndroidMech

+1

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