web-dev-qa-db-fra.com

Android: comment faire en sorte que le bouton d'entrée du clavier dise "Rechercher" et gère son clic?

Je ne peux pas comprendre cela. Certaines applications ont un EditText (zone de texte) qui, lorsque vous le touchez et affiche le clavier à l'écran, le clavier comporte un bouton "Rechercher" au lieu d'une touche d'entrée.

Je veux implémenter ceci. Comment puis-je implémenter ce bouton de recherche et détecter une pression sur le bouton de recherche?

Edit: comment utiliser le bouton de recherche; en XML, Android:imeOptions="actionSearch" ou en Java, EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);. Mais comment puis-je gérer l'utilisateur en appuyant sur ce bouton de recherche? Cela a-t-il quelque chose à voir avec Android:imeActionId?

349
Ricket

Dans la mise en page, définissez les options de votre méthode de saisie pour effectuer une recherche.

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

Dans le Java, ajoutez l'écouteur d'actions de l'éditeur.

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;
    }
});
856
Robby Pond

Masquer le clavier lorsque l'utilisateur clique sur Rechercher. Ajout à la réponse de Robby Pond

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

Dans le fichier xml, mettez imeOptions="actionSearch" et 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" />
4
Braj Bhushan Singh

À Kotlin

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

Code xml partiel

 <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>
4
Shaon

Cette réponse est pour TextInputEditText:

Dans le fichier XML de présentation, définissez les options de votre méthode de saisie sur le type requis. par exemple done.

<com.google.Android.material.textfield.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"/>

De même, vous pouvez également définir imeOptions sur actionSubmit, actionSearch, etc.

Dans le Java, ajoutez l'écouteur d'actions de l'éditeur.

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;
        }
    });

Si vous utilisez Kotlin:

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

par XML:

 <EditText
        Android:id="@+id/search_edit"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:hint="@string/search"
        Android:imeOptions="actionSearch"
        Android:inputType="text" />

Par Java:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);