जवाबों:
आप इसे OnKeyListener
अपने पर सेट करके करते हैं EditText
।
यहाँ मेरे अपने कोड से एक नमूना है। मेरे पास एक EditText
नाम है addCourseText
, जो फ़ंक्शन को कॉल करेगा addCourseFromTextBox
जब या तो कुंजी दर्ज करें या डी-पैड पर क्लिक किया जाए।
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 सेट कर सकते हैं। एंटर कुंजी बनाम डिफॉल्ट कीबोर्ड जिसमें गाड़ी की वापसी है।
<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" />
फिर आप Edit_ext तत्व के लिए TextView.OnEditorActionListener को परिभाषित करके एक्शन बटन पर प्रेस के लिए सुन सकते हैं। अपने श्रोता में, IME_ACTION_SEND जैसे EditorInfo वर्ग में परिभाषित उपयुक्त IME एक्शन आईडी का जवाब दें। उदाहरण के लिए:
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;
}
});
स्रोत: https://developer.android.com/training/keyboard-input/style.html
हम कोटलिन लैम्ब्डा का भी उपयोग कर सकते हैं
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
}
अगले संपादन क्षेत्र पर ध्यान केंद्रित करने से बचने के लिए (यदि आपके पास एक है) तो आप कुंजी-डाउन घटनाओं को अनदेखा करना चाहते हैं, लेकिन कुंजी-अप घटनाओं को संभाल सकते हैं। मैं भी कीकोड पर पहले फ़िल्टर करना पसंद करता हूं, यह मानते हुए कि यह मामूली रूप से अधिक कुशल होगा। वैसे, याद रखें कि लौटने का सही मतलब है कि आपने घटना को संभाला है, इसलिए कोई अन्य श्रोता नहीं करेगा। वैसे भी, यहाँ मेरा संस्करण है।
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;
}
}
});
यह मेरे एप्लिकेशन में से एक का एक नमूना है कि मैं कैसे संभालता हूं
//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;
}
});
इसे प्राप्त करने का सबसे अद्यतन तरीका है:
इसे XML में अपने EditText में जोड़ें:
android:imeOptions="actionSearch"
फिर आपकी गतिविधि / प्रगति में:
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}