2013-10-18 9 views
13

Wenn der Benutzer "Done" auf der Tastatur drückt, wird die Tastatur geschlossen. Ich will es so, dass es nur schließt, wenn eine bestimmte Bedingung wahr ist (zB das Passwort wurde korrekt eingegeben).So schließen Sie die Tastatur nicht, wenn DONE auf der Tastatur gedrückt wird

Dies ist mein Code (setzt einen Hörer für, wenn die Schaltfläche „Fertig“ nach oben gedrückt wird):

final EditText et = (EditText)findViewById(R.id.et); 
et.setOnEditorActionListener(new OnEditorActionListener() 
{   
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    { 
     if(actionId==EditorInfo.IME_ACTION_DONE) 
     { 
     if (et.getText().toString().equals(password)) // they entered correct 
     { 
      // log them in 
     } 
     else 
     { 
      // bring up the keyboard 
      getWindow().setSoftInputMode(
      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

      Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); 
     } 
     } 
     return false; 
    } 
}); 

Mir ist klar, dass der Grund, dies wahrscheinlich nicht funktioniert, weil es diesen Code läuft vor schließt eigentlich die Soft-Tastatur von alleine, deshalb brauche ich Hilfe. Ich weiß keinen anderen Weg.

Ein mögliches Thema für Antworten könnten mit arbeiten:

activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

und so etwas, aber ich weiß es nicht sicher.


LÖSUNG:

EditText et = (EditText)findViewById(R.id.et); 
et.setOnEditorActionListener(new OnEditorActionListener() 
{   
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    { 
    if(actionId==EditorInfo.IME_ACTION_DONE) 
    { 
     if (et.getText().toString().equals(password)) // they entered correct 
     { 
      // log them in 
      return false; // close the keyboard 
     } 
     else 
     { 
      Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); 
      return true; // keep the keyboard up 
     } 
    } 
    // if you don't have the return statements in the if structure above, you 
    // could put return true; here to always keep the keyboard up when the "DONE" 
    // action is pressed. But with the return statements above, it doesn't matter 
    return false; // or return true 
    } 
}); 

Antwort

17

wenn Ihre Rückkehr true von Ihrem onEditorAction Methode wird Aktion nicht wieder behandelt gehen werden. In diesem Fall können Sie true zurückgeben, um die Tastatur nicht zu verbergen, wenn die Aktion EditorInfo.IME_ACTION_DONE lautet.

+3

Große Antwort. Ich konnte keine Dokumentation darüber finden, was die Methode zurückgeben soll. –

Verwandte Themen