it-swarm.com.de

Verwenden Sie die "ENTER" -Taste auf dem Softkeyboard, anstatt auf die Schaltfläche zu klicken

Hallo Ich habe eine EditText-Suche und Button gesucht. Wenn ich den gesuchten Text eingebe, möchte ich anstelle der Suche Button die Taste ENTER auf dem Softkeyboard verwenden, um die Suchfunktion zu aktivieren.

Vielen Dank für die Hilfe im Voraus.

86
Peter O.

Sie tun dies, indem Sie eine OnKeyListener auf Ihrer EditText setzen.

Hier ist ein Beispiel aus meinem eigenen Code. Ich habe eine EditText namens addCourseText, die die Funktion addCourseFromTextBox aufruft, wenn entweder die Eingabetaste oder das D-Pad angeklickt wird.

addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (event.getAction() == KeyEvent.ACTION_DOWN)
        {
            switch (keyCode)
            {
                case KeyEvent.KEYCODE_DPAD_CENTER:
                case KeyEvent.KEYCODE_ENTER:
                    addCourseFromTextBox();
                    return true;
                default:
                    break;
            }
        }
        return false;
    }
});
136
Julian
<EditText
    Android:id="@+id/search"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:hint="@string/search_hint"
    Android:inputType="text"
    Android:imeOptions="actionSend" />

Sie können dann auf Druck auf die Aktionsschaltfläche warten, indem Sie einen TextView.OnEditorActionListener für das EditText-Element definieren. Antworten Sie in Ihrem Listener auf die entsprechende IME-Aktions-ID, die in der EditorInfo-Klasse definiert ist, z. B. IME_ACTION_SEND. Zum Beispiel:

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

Quelle: https://developer.Android.com/training/keyboard-input/style.html

möglicherweise können Sie Ihrem EditText ein Attribut hinzufügen:

Android:imeOptions="actionSearch"
25
itemon

füge ein Attribut zum EditText hinzu wie Android: imeOptions = "actionSearch" 

dies ist der beste Weg, um die Funktion auszuführen 

und die imeOptions haben auch andere Werte wie "go" next "next" done "done" usw.

5
ruyi.zhu

Wir können auch Kotlin Lambda verwenden

editText.setOnKeyListener { _, keyCode, keyEvent ->
        if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            Log.d("Android view component", "Enter button was pressed")
            [email protected] true
        }
        [email protected] false
    }
1
Artem Botnev

dies ist ein Beispiel einer meiner App, wie ich damit umgehe 

 //searching for the Edit Text in the view    
    final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
        myEditText.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN)
                      if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
                             (keyCode == KeyEvent.KEYCODE_ENTER)) {
                                //do something
                                //true because you handle the event
                                return true;
                               }
                       return false;
                       }
        });
0

Um zu vermeiden, dass der Fokus zum nächsten bearbeitbaren Feld wechselt (falls vorhanden), möchten Sie möglicherweise die Key-Down-Ereignisse ignorieren, aber Key-Up-Ereignisse behandeln. Ich bevorzuge es auch, zuerst nach dem keyCode zu filtern, vorausgesetzt, er wäre geringfügig effizienter. Denken Sie daran, dass die Rückgabe von true bedeutet, dass Sie das Ereignis behandelt haben, sodass kein anderer Listener dies tun kann. Wie auch immer, hier ist meine Version.

ETFind.setOnKeyListener(new OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (keyCode ==  KeyEvent.KEYCODE_DPAD_CENTER
        || keyCode ==  KeyEvent.KEYCODE_ENTER) {

            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                // do nothing yet
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                        findForward();      
            } // is there any other option here?...

            // Regardless of what we did above,
            // we do not want to propagate the Enter key up
            // since it was our task to handle it.
            return true;

        } else {
            // it is not an Enter key - let others handle the event
            return false;
        }
    }

});
0
Wojtek Jarosz