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
?
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;
}
});
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
}
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" />
À 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>
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
}
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);