Antworten:
Sie tun dies, indem Sie ein OnKeyListener
auf Ihrem setzen EditText
.
Hier ist ein Beispiel aus meinem eigenen Code. Ich habe einen EditText
Namen addCourseText
, der die Funktion aufruft, addCourseFromTextBox
wenn entweder die Eingabetaste oder das Steuerkreuz 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;
}
});
android:inputType="text"
XML- Datei für den Bearbeitungstext so einstellen , dass die Eingabetaste gegenüber der Standardtastatur mit Wagenrücklauf angezeigt wird.
<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 auf Drücken der Aktionstaste warten, indem Sie einen TextView.OnEditorActionListener für das EditText-Element definieren. Antworten Sie in Ihrem Listener auf die entsprechende IME-Aktions-ID, die in der EditorInfo-Klasse definiert ist, z. B. IME_ACTION_SEND. Beispielsweise:
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-input/style.html
Möglicherweise können Sie Ihrem EditText ein Attribut wie folgt hinzufügen:
android:imeOptions="actionSearch"
android:inputType="text"
und
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 zu vermeiden, dass der Fokus auf das nächste bearbeitbare Feld (falls vorhanden) übergeht, möchten Sie möglicherweise die Key-Down-Ereignisse ignorieren, aber Key-Up-Ereignisse behandeln. Ich bevorzuge es auch, zuerst nach dem keyCode zu filtern, vorausgesetzt, er wäre geringfügig effizienter. Denken Sie übrigens daran, dass die Rückgabe von true bedeutet, dass Sie das Ereignis behandelt haben, sodass dies kein anderer Listener tun 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 für eine meiner Apps, wie ich damit umgehe
//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;
}
});
Der aktuellste Weg, dies zu erreichen, ist:
Fügen Sie dies Ihrem EditText in XML hinzu:
android:imeOptions="actionSearch"
Dann in Ihrer Aktivität / Fragment:
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}