431 Stimmen

Android: Wie kann man die Eingabetaste der Tastatur mit "Suchen" beschriften und den Klick darauf verarbeiten?

Ich werde daraus nicht schlau. Einige Anwendungen haben ein EditText (Textfeld), das, wenn Sie es berühren und es bringt die Bildschirmtastatur, die Tastatur hat eine "Suche" Taste anstelle einer Eingabetaste.

Ich möchte dies umsetzen. Wie kann ich die Schaltfläche "Suchen" implementieren und das Drücken der Schaltfläche "Suchen" erkennen?

Editar : Ich habe herausgefunden, wie man die Schaltfläche "Suchen" implementiert; in XML, android:imeOptions="actionSearch" oder in Java, EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH); . Aber wie gehe ich damit um, wenn der Benutzer die Schaltfläche "Suchen" drückt? Hat das etwas zu tun mit android:imeActionId ?

1028voto

Robby Pond Punkte 71994

Stellen Sie im Layout Ihre Eingabemethodenoptionen auf Suche ein.

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />

Fügen Sie in der Java-Datei den Editor-Action-Listener hinzu.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

29voto

kaMChy Punkte 431

Tastatur ausblenden, wenn der Benutzer auf die Suche klickt. Zusatz zu Robby Pond Antwort

private void performSearch() {
    editText.clearFocus();
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    //...perform search
}

15voto

En xml Datei, setzen imeOptions="actionSearch" y inputType="text" , maxLines="1" :

<EditText
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:maxLines="1" />

12voto

Shaon Punkte 2020

In Kotlin

evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        doTheLoginWork()
    }
    true
}

Teilweiser Xml-Code

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
       <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginUserEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>
</LinearLayout>

3voto

iAmSauravSharan Punkte 15

Diese Antwort bezieht sich auf TextInputEditText :

Legen Sie in der Layout-XML-Datei die Optionen für die Eingabemethode auf den gewünschten Typ fest, z. B. fertig .

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionGo"/>

</com.google.Android.material.textfield.TextInputLayout>

In ähnlicher Weise können Sie auch imeOptions auf actionSubmit, actionSearch, etc. setzen

Fügen Sie in der Java-Datei den Editor-Action-Listener hinzu.

TextInputLayout textInputLayout = findViewById(R.id.textInputLayout);

textInputLayout.getEditText().setOnEditorActionListener(new 

    TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_GO) {
                performYourAction();
                return true;
            }
            return false;
        }
    });

Wenn Sie kotlin verwenden :

textInputLayout.editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_GO) {
        performYourAction()
    }
    true
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X