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
}
});
Große Antwort. Ich konnte keine Dokumentation darüber finden, was die Methode zurückgeben soll. –