Bonjour J'ai une recherche EditText
et une recherche Button
. Lorsque je tape le texte recherché, j'aimerais utiliserENTRERsur la touche programmable au lieu de search Button
pour activer la fonction de recherche.
Merci d'avance pour votre aide.
Vous le faites en définissant une OnKeyListener
sur votre EditText
.
Voici un exemple de mon propre code. J'ai un EditText
nommé addCourseText
, qui appellera la fonction addCourseFromTextBox
lorsque l'utilisateur clique sur la touche Entrée ou sur le pavé tactile.
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;
}
});
<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" />
Vous pouvez ensuite écouter les appuis sur le bouton d'action en définissant un TextView.OnEditorActionListener pour l'élément EditText. Dans votre écouteur, répondez à l'ID d'action IME approprié défini dans la classe EditorInfo, tel que IME_ACTION_SEND. Par exemple:
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;
}
});
Source: https://developer.Android.com/training/keyboard-input/style.html
peut-être pourriez-vous ajouter un attribut à votre EditText comme ceci:
Android:imeOptions="actionSearch"
ajouter un attribut à EditText comme Android: imeOptions = "actionSearch"
c'est la meilleure façon de faire la fonction
et les imeOptions ont aussi d'autres valeurs comme "go" next "next" "done" etc.
On peut aussi utiliser Kotlin lambda
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
}
ceci est un échantillon de l'un de mes app comment je gère
//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;
}
});
Pour éviter que le focus ne passe au champ éditable suivant (si vous en avez un), vous pouvez ignorer les événements de raccourci clavier, mais gérer les événements de raccourci clavier. Je préfère également filtrer d'abord sur le keyCode, en supposant qu'il serait légèrement plus efficace. En passant, rappelez-vous que si vous retournez la valeur true, cela signifie que vous avez géré l'événement. Aucun autre auditeur ne le fera. Quoi qu'il en soit, voici ma 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;
}
}
});