Verwenden Sie „ENTER“ Taste auf Softkeyboard statt Klicken auf die Taste
-
10-10-2019 - |
Frage
Hallo
Ich habe eine gesuchte EditText
und Suche Button
. Als ich den Text gesucht geben, würde ich gerne verwenden ENTER auf Softkeyboard statt Suche Button
zu aktivieren Suchfunktion.
Vielen Dank für die Hilfe im Voraus.
Lösung
Sie tun es, indem eine OnKeyListener
auf EditText
Einstellung.
Hier ist ein Beispiel aus meinem eigenen Code. Ich habe eine EditText
namens addCourseText
, die die Funktion addCourseFromTextBox
rufen, wenn entweder die Enter-Taste oder der D-Pad 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;
}
});
Andere Tipps
<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 drückt auf die Aktionstaste hören, indem ein TextView.OnEditorActionListener für das EditText Element definieren. In Ihrem Zuhörer, reagieren auf die entsprechende IME Aktions-ID in der EditorInfo Klasse definiert, wie IME_ACTION_SEND. Zum Beispiel:
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- Ein- / style.html
sein können Sie ein Attribut zu Ihrem EditText wie diese könnten hinzufügen:
android:imeOptions="actionSearch"
Fügen Sie ein Attribut zum EditText wie Android: imeOptions = "actionSearch"
Dies ist der beste Weg, um die Funktion zu tun
und die imeOptions haben auch einige andere Werte wie "go", "next", "fertig" etc.
Wir können auch Kotlin Lambda verwenden
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
}
Um den Fokus zu vermeiden, um zum nächsten editierbaren Feld voran (falls Sie eine haben) Sie könnten den Schlüssel-Down-Ereignisse ignorieren wollen, aber Griff Schlüssel-Events. Ich ziehe es auch Filter zuerst auf dem keyCode unter der Annahme, dass es geringfügig effizienter wäre. By the way, erinnern, dass die Rückkehr wahr bedeutet, dass Sie das Ereignis behandelt haben, so dass kein anderer Hörer wird. 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;
}
}
});
Dies ist ein Beispiel von einem meiner app, wie ich handle
//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;
}
});