एंड्रॉइड: कीबोर्ड एंटर बटन को "सर्च" कैसे करें और इसके क्लिक को कैसे हैंडल करें?


373

मैं इसका पता नहीं लगा सकता। कुछ ऐप्स में एक EditText (टेक्स्टबॉक्स) होता है, जिसे जब आप इसे छूते हैं और यह ऑन-स्क्रीन कीबोर्ड लाता है, तो कीबोर्ड में एंटर कुंजी के बजाय "खोज" बटन होता है।

मैं इसे लागू करना चाहता हूं। मैं उस खोज बटन को कैसे लागू कर सकता हूं और खोज बटन का पता लगा सकता हूं?

संपादित करें : खोज बटन को लागू करने का तरीका पाया गया; एक्सएमएल में, android:imeOptions="actionSearch"या जावा में, EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);। लेकिन मैं उस खोज बटन को दबाने वाले उपयोगकर्ता को कैसे संभालूं? क्या इसके साथ कुछ करना है android:imeActionId?


3
ध्यान दें कि कुछ उपकरणों पर imeOptions काम नहीं कर सकता है। यह और यह देखें ।
एरमोलाई

जवाबों:


904

लेआउट में खोज करने के लिए अपने इनपुट विधि विकल्प सेट करें।

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />

जावा में संपादक कार्रवाई श्रोता जोड़ें।

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

82
ओएस 2.3.6 पर यह तब तक काम नहीं करता जब तक मैं एंड्रॉइड नहीं डालता: इनपुट टाइप = "टेक्स्ट" विशेषता।
थेनबिनह84 15

41
Android: inputType = "टेक्स्ट" मेरे लिए एंड्रॉइड 2.3.5 और 4.0.4 पर भी आवश्यक था
ccyrille

6
@ कैरोल EditTextएक उप वर्ग है TextView
हॉवेटल

13
android: inputType = "text" को 4.4.0 - 4.4.2 (Android किटकैट) के लिए भी आवश्यक है।
user818455

12
युप, एंड्रॉइड: इनपुट टाइप = "टेक्स्ट" अभी भी 5.0 में आवश्यक है :)
lionelmessi

19

उपयोगकर्ता द्वारा खोज पर क्लिक करने पर कीबोर्ड छिपाएं। रॉबी पॉन्ड का जवाब

private void performSearch() {
    editText.clearFocus();
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
    //...perform search
}

7

में xmlफ़ाइल, डाल imeOptions="actionSearch"और inputType="text", maxLines="1":

<EditText
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:maxLines="1" />

5

कोटलिन में

evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        doTheLoginWork()
    }
    true
}

आंशिक Xml कोड

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
       <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginUserEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>
</LinearLayout>

1

यह उत्तर TextInputEditText के लिए है:

लेआउट में एक्सएमएल फ़ाइल आपके इनपुट प्रकार के विकल्प को आपके आवश्यक प्रकार पर सेट करती है। उदाहरण के लिए किया

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionGo"/>

इसी तरह, आप imeOptions को actionSubmit, actionSearch, आदि पर भी सेट कर सकते हैं

जावा में संपादक कार्रवाई श्रोता जोड़ें।

textInputLayout.getEditText().setOnEditorActionListener(new 

    TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_GO) {
                performYourAction();
                return true;
            }
            return false;
        }
    });

यदि आप कोटलिन का उपयोग कर रहे हैं:

textInputLayout.editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_GO) {
        performYourAction()
    }
    true
}

0

XML द्वारा:

 <EditText
        android:id="@+id/search_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/search"
        android:imeOptions="actionSearch"
        android:inputType="text" />

जावा द्वारा:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.