android: Softkeyboard führt eine Aktion aus, wenn die Fertig-Taste gedrückt wird

77

Ich habe einen EditText. Ich möchte, dass der Benutzer nach dem Eingeben von Text, wenn er die DoneTaste des Softkeyboards drückt , direkt einen Suchvorgang ausführt, den ich auch in einem Schaltflächenklickereignis implementiert habe.

Khawar Raza
quelle
1
Besser mit Kotlin in diesem Kommentar: stackoverflow.com/a/48810268/1912924
Francesco Donzello

Antworten:

204

Versuche dies

editText.setOnEditorActionListener(new OnEditorActionListener() {        
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId==EditorInfo.IME_ACTION_DONE){
            //do something
        }
    return false;
    }
});
Adil Soomro
quelle
20

Versuche dies

Es funktioniert sowohl für DONE als auch für RETURN .

EditText editText= (EditText) findViewById(R.id.editText);
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId,
                        KeyEvent event) {
                    if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
                            || actionId == EditorInfo.IME_ACTION_DONE) {
                        // Do your action
                        return true;
                    }
                    return false;
                }
            });
Silambarasan Poonguti
quelle
0

Sie fangen den KeyEventund überprüfen dann seinen Schlüsselcode. FLAG_EDITOR_ACTIONwird verwendet, um Eingabetasten zu identifizieren, die von einem IME stammen, dessen Eingabetaste automatisch mit "next" oder "done" gekennzeichnet wurde.

if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
    //your code here

Finden Sie die Dokumentation hier .

Zweite Methode

myEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    int result = actionId & EditorInfo.IME_MASK_ACTION;
    switch(result) {
    case EditorInfo.IME_ACTION_DONE:
        // done stuff
        break;
    case EditorInfo.IME_ACTION_NEXT:
        // next stuff
        break;
    }
 }
});
AndroidGeek
quelle
0

Versuche dies

Dies funktioniert in beiden Fällen, unabhängig davon, ob auf Ihrer Tastatur das Eingabezeichen oder das nächste Pfeilzeichen angezeigt wird

YourEdittextName.setOnEditorActionListener(new TextView.OnEditorActionListener()
    {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {
            if(actionId== EditorInfo.IME_ACTION_DONE||actionId==EditorInfo.IME_ACTION_NEXT)
            {
                //Perform Action here 
            }
            return false;
        }
    });

Wenn Sie vor einer roten Linie stehen, tun Sie dies ... importieren Sie Keyevent und EditorInfo, indem Sie Alt + Eingabetaste drücken, dann werden alle Fehler entfernt .......

Sunil
quelle