मैं एक Android EditView 'Done' बटन कैसे बनाऊं और क्लिक करने पर कीबोर्ड को छिपाऊं?


115

जब उपयोगकर्ता EditViewएंड्रॉइड पर क्लिक करता है , तो एंड्रॉइड कीबोर्ड को खोलता है ताकि उपयोगकर्ता अंदर लिख सके EditView

समस्या यह है, जब उपयोगकर्ता लेखन किया जाता है, तो कीबोर्ड को छिपाने का कोई तरीका नहीं है। कीबोर्ड को छिपाने के लिए यूजर को बैक बटन दबाना होगा।

क्या Doneकीबोर्ड पर एक बटन प्रदर्शित करने का एक तरीका है जो कीबोर्ड को छिपाएगा?


जवाबों:


139

उपयोग TextView.setImeOptions और यह actionDone गुजरती हैं। पसंदtextView.setImeOptions(EditorInfo.IME_ACTION_DONE);


8
textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
सलाई

14
मुझे textView.singleLine(true)प्रोग्रामेटिक रूप से काम करने के लिए इसे जोड़ना था ।
जैक्सनक्रा

लेकिन यह एंड्रॉइड 2.3 के बाद से हटा दिया गया है
सुमित कुमार साहा

148

पहले आपको अपने लक्ष्य EditText के android:imeOptionsबराबर विशेषता सेट करने की आवश्यकता है actionDoneजैसा कि नीचे देखा गया है। यह आपके EditText के सॉफ्ट कीबोर्ड में आपके 'RETURN' बटन को 'DONE' बटन में बदल देगा।

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />

@ मिचेल ने उस लिंक को हटा दिया। धन्यवाद
परेश मेयानी

19
मुझे इसे जोड़ने के android:singleLine="true"लिए xml के माध्यम से काम करना था
जैक्सनक्रा

4
एंड्रॉइड: सिंगललाइन पदावनत है। Android का उपयोग करें: maxLines = "1"।
फरिबोर्ज

हां @FariborZ सिंगललाइन अभी हटा दी गई है।
परेश मेयानी

1
महत्वपूर्ण नोट: सिंगललाइन अधिकतमलाइन के समान नहीं है। यह गलत धारणा हर किसी के लिए बहुत सारे मुद्दों का कारण बनती है, हमें हर जगह यह ध्यान देने की जरूरत है। stackoverflow.com/questions/30879471/…
मिल्स

86

दोनों को शामिल करें imeOptions और singleLine :

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

35
android:imeActionLabel="Done" 
android:singleLine="true"

XML फ़ाइल में बस ठीक काम करता है। लेकिन इससे आपको editTextएक ही लाइन में टाइपिंग रखने का भी कारण होगा जो आप नहीं चाहते हैं। इसलिए अपने कोड में निम्नलिखित जोड़ने से यह सुनिश्चित हो जाएगा कि आप एक ही लाइन पर सब कुछ टाइप नहीं करेंगे।

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");

1
धन्यवाद, डेमो १२ को था, समय ११:५ on का था और आपने मेरा मुद्दा
११:०६

Android: singleLine = "true" को हटा दिया गया है। तो उपयोग करें, एंड्रॉइड: लाइनें = "1"
गौथम।

20

किया बटन प्राप्त करने के लिए

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

तथा

android:inputType="text" xml में

कीबोर्ड से क्लिक किए गए काम को संभालने के लिए

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

`


14

इसे इस्तेमाल करो:

android:singleLine="true"

हां ... अन्यथा कीबोर्ड को बंद करने के लिए अगली पंक्ति में जाने को कैसे अलग किया जा सकता है?
jstewart379

यह वही है जो मेरे लिए काम कर रहा है। मैं actionDoneवहाँ के रूप में अच्छी तरह से होने के साथ त्रुटि का फैसला किया , बस के मामले में कुछ उपकरणों अलग प्रतिक्रिया करते हैं।
जैक्सनक्रा

10

इन दो लाइनों का उपयोग करें EditText

android:imeActionLabel="Done"
android:singleLine="true"

या आप इसे इस लाइन द्वारा प्रोग्रामेटिक रूप से प्राप्त कर सकते हैं।

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

यदि विजेट के लिए संपत्ति नहीं बदलती android:imeOptions="actionDone"है तो लेआउट xmlफ़ाइल में इसका उपयोग करना बेहतर हो सकता है ।




5

एक्शनडोन का उपयोग कीबोर्ड में उस समय बटन पर क्लिक करते समय किया जाता है जब कीबोर्ड छिपा होता है। एडिट टेक्स्ट या AppcompatEdit में उपयोग करें

एक्सएमएल

1.1 यदि आप AppCompatEdittext का उपयोग करते हैं

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 यदि आप Edittext का उपयोग करते हैं

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

जावा

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

5

मुझे यह बताना होगा कि बहुत से लोग समस्या को जाने बिना उसमें संघर्ष कर सकते हैं।

यदि आप चाहते हैं कि क्लिक करते समय kb छिप जाए Done, और आप अपने EditText को सेट किए बिनाandroid:imeOptions="actionDone" & सेट करते हैं, तो यह काम नहीं करेगा क्योंकि EditText के लिए डिफ़ॉल्ट बहुत से लोगों को नहीं लगता है।android:maxLines="1" inputTypeinputType"text"

हां, तो केवल सेटिंग inputTypeआपके इच्छित परिणाम दे देंगे जो कुछ भी क्या आप इसे पसंद करने के लिए सेट कर रहे हैं "text", "number", ... आदि।


2

वास्तव में आप कस्टम टेक्स्ट को उस छोटे नीले बटन पर सेट कर सकते हैं। Xml फ़ाइल में बस उपयोग करें

android:imeActionLabel="whatever"

अपने EditText पर।

या जावा फ़ाइल के उपयोग में

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

मैं मनमाने ढंग से IME_ACTION_DONE को इस फ़ंक्शन के लिए दूसरे पैरामीटर में जाने के उदाहरण के रूप में चुनता हूं । इन क्रियाओं की पूरी सूची यहां पाई जा सकती है

यह ध्यान दिया जाना चाहिए कि इससे सभी डिवाइस पर सभी कीबोर्ड पर टेक्स्ट दिखाई नहीं देगा। कुछ कीबोर्ड उस बटन (जैसे स्विफ्टकी) पर टेक्स्ट का समर्थन नहीं करते हैं। और कुछ डिवाइस इसे सपोर्ट नहीं करते हैं। एक अच्छा नियम है, यदि आप बटन पर पहले से ही टेक्स्ट देखते हैं, तो यह आपको जो चाहेगा उसे बदल देगा।


2

कोटलिन समाधान

कोटलिन में छिपा कीबोर्ड + किए गए कार्रवाई को संभालने का सीधा तरीका है:

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}

कोटलिन एक्सटेंशन

edittext.onDone {/*action*/}अपने मुख्य कोड में कॉल करने के लिए इसका उपयोग करें । इसे और अधिक पठनीय और बनाए रखने योग्य बनाता है

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

अतिरिक्त कीबोर्ड एक्सटेंशन

यदि आप कीबोर्ड (शो, क्लोज़, फ़ोकस) के साथ काम करना अधिक सरल बनाना चाहते हैं: तो इस पोस्ट को पढ़ें

यदि कोड में नहीं हैं, तो इन विकल्पों को अपने संपादन Xml में जोड़ना न भूलें

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

inputType="textMultiLine"समर्थन चाहिए ? इस पोस्ट को पढ़ें और Xml में imeOptionsया न जोड़ेंinputType



0

यदि आप उपयोग कर रहे हैं

android:imeOptions="actionDone" 

तो आप का उपयोग करना चाहिए

android:inputType="text"

उसके बाद ही आप कीबोर्ड में Action Done बटन देख सकते हैं।


0

यदि आप कोई भी बटन नहीं चाहते हैं (जैसे आप नेत्रहीन लोगों के लिए एक GUI विकसित कर रहे हैं जहाँ नल स्थितीय नहीं हो सकता है और आप सिंगल / डबल / लॉन्ग टैप पर निर्भर हैं):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

या कोटलिन में:

text.imeOptions = EditorInfo.IME_ACTION_NONE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.