2012-11-27 19 views
14

मुझे बटन क्लिक करने के बाद एंड्रॉइड कीबोर्ड को छिपाने की आवश्यकता है।एंड्रॉइड: बटन के बाद कीबोर्ड छुपाएं

मैंने यह कैसे किया है इसके कई उदाहरण देखे हैं, हालांकि, वे सभी एक विशिष्ट संपादन टेक्स्ट ऑब्जेक्ट का उपयोग करने लगते हैं।

उदा।

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

मेरी समस्या यह है कि मैं गतिशील रूप से स्क्रीन का निर्माण कर रहा हूं, इस प्रकार माने टेक्स्ट फ़ील्ड संपादित कर सकते हैं। क्या कोई तरीका है कि कीबोर्ड को मेरे बिना छुपाया जा सकता है कि कौन सा संपादन टेक्स्ट ऑब्जेक्ट मैं इसे छुपा रहा हूं।

धन्यवाद

मार्टिन

+0

आप पूरी गतिविधि के लिए इसे छुपा सकते हैं, यह सार अच्छी तरह से: http://stackoverflow.com/questions/7789514/how-to-get-activitys-windowtoken-without-view –

उत्तर

36

आप इसके बजाय, अपने लेआउट के लिए सेट कर सकता है यानी:

LinearLayout mainLayout; 

// Get your layout set up, this is just an example 
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout); 

// Then just use the following: 
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0); 

यह एक उदाहरण यह सोचते हैं कि अपने लेआउट (कितने EditText वस्तुओं की परवाह किए बिना बनाया जाएगा है या अन्य वस्तुओं) पर रखा गया है।

संपादित करें: इसके अलावा, मुझे कुछ उपयोगी लगता है यह सुनिश्चित करना है कि जब कोई गतिविधि पहली बार लॉन्च होती है तो कुंजीपटल छुपाया जाता है (यानी: यदि EditText पहली बात केंद्रित है)। ऐसा करने के लिए, मैं गतिविधि की onCreate() विधि में रखते:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
+0

आप छोटे सितारा हैं। एक इलाज करता है। –

+1

धन्यवाद आपका कोड मुझे बहुत मदद करता है – Simmant

+0

ध्यान दें कि यह अन्य दृश्य भागों के लिए भी काम करता है, उदा। एक संपादन टेक्स्ट :) फिर आप निम्न पंक्ति को बदल देंगे: 'imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0); – Michael

20

न जब अपने कीबोर्ड खुला नहीं मामले में क्योंकि कोशिश पकड़ ब्लॉग का उपयोग करने के लिए भूल जाते हैं और अगर आप कुंजी कुंजी बोर्ड छिपाने कोड एप्लिकेशन का उपयोग

दुर्घटना होगा
try { 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
} catch (Exception e) { 
    // TODO: handle exception 
} 
+0

अब तक का सबसे सरल और सुरुचिपूर्ण समाधान –

+0

@upvoted .. क्रैश फिक्स्ड .. thx –

6

आप निम्नलिखित कोड का उपयोग कर शायद बटन क्लिक घटना पर कुंजीपटल छिपा सकते हैं:

//================ Hide Virtual Key Board When Clicking==================// 

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); 

//======== Hide Virtual Keyboard =====================// 
2

आप इस कोड

// Check if no view has focus: 
View view = this.getCurrentFocus(); 
if (view != null) { 
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 
1

एक गतिविधि पर समस्या है, तो का उपयोग केवल निम्नलिखित काम करेगा:

try { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
बाकी

अगर कोड एक टुकड़ा में आवश्यक है निम्नलिखित है

try { 
     InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

यह बटन ब्लॉक पर कीबोर्ड के छिपाने या घटना ब्लॉक में लिखे गए विशिष्ट समझा जाने वाले किसी भी अन्य ईवेंट को संभालेगा।

0
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0); 
संबंधित मुद्दे