Frage Verwenden Sie die "ENTER" -Taste auf der Softkeykarte, anstatt auf die Schaltfläche zu klicken


Hallo Ich habe ein Gesuchtes EditText und suchen Button. Wenn ich den gesuchten Text eintippe, würde ich gerne verwenden EINGEBEN Taste auf Softkeyboard statt Suche Button um die Suchfunktion zu aktivieren.

Vielen Dank für die Hilfe im Voraus.


75
2017-12-15 15:05


Ursprung


Antworten:


Sie tun es, indem Sie a einstellen OnKeyListener auf Ihrem EditText.

Hier ist ein Beispiel aus meinem eigenen Code. ich habe ein EditText genannt addCourseText, die die Funktion aufrufen wird addCourseFromTextBox wenn entweder die Eingabetaste oder das Steuerkreuz 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;
    }
});

124
2017-12-15 15:43



<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 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 wurde, z. B. IME_ACTION_SEND. Beispielsweise:

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


30
2018-03-19 09:58



Vielleicht könnten Sie Ihrem EditText ein Attribut wie folgt hinzufügen:

android:imeOptions="actionSearch"

25
2017-12-15 16:07



fügen Sie dem EditText ein Attribut hinzu android: imeOptions = "actionSearch"

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

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


5
2018-01-24 12:20



Um zu vermeiden, dass der Fokus auf das nächste editierbare Feld (falls vorhanden) zubewegt wird, möchten Sie möglicherweise die Key-Down-Ereignisse ignorieren, aber Key-Up-Ereignisse behandeln. Ich bevorzuge auch, zuerst auf dem keyCode zu filtern, vorausgesetzt, dass es marginal effizienter wäre. Denken Sie übrigens daran, dass die Rückgabe von true bedeutet, dass Sie das Ereignis behandelt haben, also kein anderer Zuhörer. 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
2018-04-26 08:24



Dies ist ein Beispiel für eine meiner App, wie ich damit umgehen

 //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
2017-10-12 14:43