2010-08-24 11 views
115

बटन दबाए जाने पर कीबोर्ड को कैसे खारिज कर सकता हूं?एंड्रॉइड खारिज कीबोर्ड

+0

एक EditText फ़ोकस करने योग्य = झूठी बनाओ काम करता है। क्या आप इसे पूरी तरह अक्षम करना चाहते हैं? – st0le

उत्तर

283

आप वर्चुअल कीबोर्ड को अक्षम या खारिज करना चाहते हैं?

आप इसे खारिज करने के लिए आप क्लिक करें घटना पर अपने बटन के दशक में कोड की निम्न लाइनों का उपयोग कर सकते

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
+1

+1। आकर्षण की तरह काम करता है। –

+1

इसके साथ दो समस्याएं .... एक यह है कि myEditText को अंतिम होने की आवश्यकता है। दूसरा यह है कि मुझे यह जानना है कि कौन सा एडिटटेक्स्ट बॉक्स फोकस है। इसका कोई समाधान? –

+66

किसी और के लिए जो यहां ठोकर खाती है, आप गतिविधि का उपयोग कर सकते हैं (या तो आप जिस गतिविधि में हैं या टुकड़े 'एक्टिविटी() ') प्राप्त करें' getCurrentFocus()। HideWoftowputFromWindow()' के पहले तर्क के लिए getWindowToken() '। साथ ही, इसे 'ऑन पॉज़()' में करें और 'ऑनस्टॉप()' नहीं, यदि आप गतिविधियों को बदलते समय इसे दूर करने की कोशिश कर रहे हैं। –

13

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

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
+0

वह विधि केवल मेरे लिए काम कर रही थी, धन्यवाद! – Emilio

+11

हम्म। यह मेरे लिए बिल्कुल काम नहीं करता है। – tomwhipple

+0

या तो एपीआई 23 –

5

InputMethodManager के साथ पहला समाधान मेरे लिए एक चैंप की तरह काम करता है, getWindow()। setSoftInputMode विधि एंड्रॉइड 4.0.3 एचटीसी अमेज़ पर नहीं था।

@ ईथन एलन, मुझे संपादन टेक्स्ट को अंतिम बनाने की आवश्यकता नहीं थी। हो सकता है कि आप एक एडिटटेक्स्ट आंतरिक कक्षा का उपयोग कर रहे हैं जिसे आपने युक्त विधि घोषित की है? आप एडिटटेक्स्ट को गतिविधि के क्लास वैरिएबल बना सकते हैं। या बस आंतरिक कक्षा/विधि के अंदर एक नया संपादन टेक्स्ट घोषित करें और फिर findViewById() का उपयोग करें। साथ ही, मुझे नहीं पता था कि मुझे यह जानने की जरूरत है कि फ़ॉर्म में कौन सा एडिटटेक्स्ट फोकस था। मैं बस एक मनमाने ढंग से चुन सकता हूं और इसका इस्तेमाल कर सकता हूं। इस तरह:

+3

पर मेरे लिए काम नहीं करता है स्टैक ओवरफ़्लो में आपका स्वागत है! यह वास्तव में एक टिप्पणी है, जवाब नहीं। थोड़ा और प्रतिनिधि के साथ, [आप टिप्पणियां पोस्ट करने में सक्षम होंगे] (http://stackoverflow.com/privileges/comment)। – Jack

+2

यह एक सही उत्तर है। धन्यवाद एंडी! –

50

ऊपर दिया गया समाधान सभी डिवाइस के लिए काम नहीं करता है और इसके अलावा यह पैरामीटर के रूप में EditText का उपयोग कर रहा है। यह मेरा समाधान है, सिर्फ इस सरल विधि कॉल:

private void hideSoftKeyBoard() { 
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 

    if(imm.isAcceptingText()) { // verify if the soft keyboard is open      
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
} 
+1

शानदार बिंदु, धन्यवाद – Fattie

+2

'isAcceptingText()' ने यह उत्तर दूसरों की तुलना में बेहतर बना दिया – user1506104

22

यह मेरा समाधान है

public static void hideKeyboard(Activity activity) { 
    View v = activity.getWindow().getCurrentFocus(); 
    if (v != null) { 
     InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
    } 
} 
4
public static void hideSoftInput(Activity activity) { 
    try { 
     if (activity == null || activity.isFinishing()) return; 
     Window window = activity.getWindow(); 
     if (window == null) return; 
     View view = window.getCurrentFocus(); 
     //give decorView a chance 
     if (view == null) view = window.getDecorView(); 
     if (view == null) return; 

     InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (imm == null || !imm.isActive()) return; 
     imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 
3

यहाँ एक Kotlin समाधान

एक बनाएँ (सूत्र में विभिन्न जवाब मिश्रण) है एक्सटेंशन फ़ंक्शन (शायद एक सामान्य व्यूहेल्पर क्लास में)

fun Activity.dismissKeyboard() { 
    val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    if(inputMethodManager.isAcceptingText) 
     inputMethodManager.hideSoftInputFromWindow(this.currentFocus.windowToken, /*flags:*/ 0) 
} 

तो बस का उपयोग कर उपभोग:

// from activity 
this.dismissKeyboard() 

// from fragment 
activity.dismissKeyboard() 
संबंधित मुद्दे