बटन पर क्लिक करने के बजाय सॉफ्टकीबोर्ड पर "ENTER" कुंजी का उपयोग करें


94

हैलो, मुझे एक खोज EditTextऔर खोज मिली है Button। जब मैं खोजा हुआ पाठ टाइप करता हूं, तो मैं खोज फ़ंक्शन को सक्रिय करने के लिए खोज के बजाय सॉफ्टकीबोर्ड पर ENTER कुंजी का उपयोग करना चाहता हूं Button

मदद के लिए अग्रिम में धन्यवाद।

जवाबों:


155

आप इसे 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;
    }
});

4
वास्तव में, यह नरम कुंजी के लिए गारंटी नहीं है। उदाहरण के लिए, यह Nexus 7 (Android 4.2) पर "ENTER" के लिए काम नहीं करता है और "BACK" के लिए यह करता है।
गेदेओन

4
@ Ghedeon आप android:inputType="text"एडिट टेक्स्ट के लिए xml सेट कर सकते हैं। एंटर कुंजी बनाम डिफॉल्ट कीबोर्ड जिसमें गाड़ी की वापसी है।
निक

2
इस विधि जेलीबीन के रूप में काम करने के लिए guarranteed नहीं है, को देखने के developer.android.com/reference/android/view/KeyEvent.html
Constantin

@Ghedeon आपको Nexus 7 पर "ENTER" के लिए कैसे काम करना है?
HairOfTheDog

3
यह समाधान कई उपकरणों पर पूरी तरह से टूट गया है, नेक्सस 7 शामिल हैं। इसका उपयोग न करें!
user3562927

44
<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


26

आप इस तरह से अपने EditText में एक विशेषता जोड़ सकते हैं:

android:imeOptions="actionSearch"

1
यदि आप खोज संपादन पाठ का निर्माण कर रहे हैं तो यह सरल उपाय है।
स्टीवेइकर

के android:inputType="text"रूप में अच्छी तरह से सेट करने की जरूरत है
li2

6

Android की तरह EditText में एक विशेषता जोड़ें: imeOptions = "actionSearch"

यह कार्य करने का सबसे अच्छा तरीका है

और imeOptions में कुछ अन्य मान भी हैं जैसे "जाना" ptions "अगला" ptions "किया" आदि।


2

हम कोटलिन लैम्ब्डा का भी उपयोग कर सकते हैं

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
    }

0

अगले संपादन क्षेत्र पर ध्यान केंद्रित करने से बचने के लिए (यदि आपके पास एक है) तो आप कुंजी-डाउन घटनाओं को अनदेखा करना चाहते हैं, लेकिन कुंजी-अप घटनाओं को संभाल सकते हैं। मैं भी कीकोड पर पहले फ़िल्टर करना पसंद करता हूं, यह मानते हुए कि यह मामूली रूप से अधिक कुशल होगा। वैसे, याद रखें कि लौटने का सही मतलब है कि आपने घटना को संभाला है, इसलिए कोई अन्य श्रोता नहीं करेगा। वैसे भी, यहाँ मेरा संस्करण है।

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;
        }
    }

});

0

यह मेरे एप्लिकेशन में से एक का एक नमूना है कि मैं कैसे संभालता हूं

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

0

इसे प्राप्त करने का सबसे अद्यतन तरीका है:

इसे 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
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.