Frage

Hallo Ich habe eine gesuchte EditText und Suche Button. Als ich den Text gesucht geben, würde ich gerne verwenden ENTER auf Softkeyboard statt Suche Button zu aktivieren Suchfunktion.

Vielen Dank für die Hilfe im Voraus.

War es hilfreich?

Lösung

Sie tun es, indem eine OnKeyListener auf EditText Einstellung.

Hier ist ein Beispiel aus meinem eigenen Code. Ich habe eine EditText namens addCourseText, die die Funktion addCourseFromTextBox rufen, wenn entweder die Enter-Taste oder der 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;
    }
});

Andere Tipps

<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 drückt auf die Aktionstaste hören, indem ein TextView.OnEditorActionListener für das EditText Element definieren. In Ihrem Zuhörer, reagieren auf die entsprechende IME Aktions-ID in der EditorInfo Klasse definiert, wie 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- Ein- / style.html

sein können Sie ein Attribut zu Ihrem EditText wie diese könnten hinzufügen:

android:imeOptions="actionSearch"

Fügen Sie ein Attribut zum EditText wie Android: imeOptions = "actionSearch"

Dies ist der beste Weg, um die Funktion zu tun

und die imeOptions haben auch einige andere Werte wie "go", "next", "fertig" etc.

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")
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }

Um den Fokus zu vermeiden, um zum nächsten editierbaren Feld voran (falls Sie eine haben) Sie könnten den Schlüssel-Down-Ereignisse ignorieren wollen, aber Griff Schlüssel-Events. Ich ziehe es auch Filter zuerst auf dem keyCode unter der Annahme, dass es geringfügig effizienter wäre. By the way, erinnern, dass die Rückkehr wahr bedeutet, dass Sie das Ereignis behandelt haben, so dass kein anderer Hörer wird. 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;
        }
    }

});

Dies ist ein Beispiel von einem meiner app, wie ich handle

 //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;
                       }
        });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top