2011-01-02 12 views
15

मैं एंड्रॉइड में एक साधारण टाइपिंग गेम बना रहा हूं। मुझे भौतिक कीबोर्ड से इनपुट प्राप्त करने में कोई समस्या नहीं है, लेकिन अब मैं संपादन टेक्स्ट के बिना नरम कीबोर्ड प्राप्त करने की कोशिश कर रहा हूं।क्या मैं संपादन टेक्स्ट के बिना सॉफ्ट कीबोर्ड का उपयोग कर सकता हूं?

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(keyboard_edittext, InputMethodManager.SHOW_FORCED); // SHOW_IMPLICIT also failed 

2.onCreate() में यह पंक्ति:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
दृश्यता = "अदृश्य" और इस लाइन के साथ

1. EditText: अब तक, मैं निम्नलिखित की कोशिश की है

यह विधि वास्तव में स्क्रीन के नीचे 10% के नीचे एक खाली सफेद बॉक्स प्रदर्शित करती है लेकिन कीबोर्ड नहीं, हालांकि जब मैं इसे चलाता हूं तो यह कुछ भी नहीं करता है।

3.onCreate() में एक और दो पंक्तियों:

InputMethodManager m = (InputMethodManager)this.getSystemService (Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 

इन में से किसी पर कोई भाग्य। क्या संपादन टेक्स्ट पर ध्यान दिए बिना सॉफ्ट कीबोर्ड (और फिर onKeyUp/onKeyDown) का उपयोग करना भी संभव है?

अभी, एकमात्र तरीका मैं देख सकता हूं कि यह मुलायम कीबोर्ड (यानी इसे स्क्रैच से बनाएं) का अपना कार्यान्वयन बनाना है। उस के लिए तत्पर नहीं हैं!

+0

भले ही आप सॉफ्ट कीबोर्ड दिखाने के लिए प्रबंधन करते हैं, तोKeyUp()/Down() को कॉल नहीं किया जाएगा - कम से कम सभी कुंजी और सभी एंड्रॉइड संस्करणों के लिए नहीं। कुछ एंड्रॉइड (पुराने) संस्करणों में (मुझे लगता है 1.5 और शायद 1.6) पर केडडाउन() को संख्यात्मक कुंजी द्वारा बुलाया जाता है, लेकिन कोई पत्र नहीं। फिर भी, सामान्य रूप से सॉफ्ट कीबोर्ड इनपुट प्राप्त करने के लिए केडडाउन() पर उपयोग करने से आपको वांछित परिणाम नहीं मिलेंगे - यह केवल हार्ड कीबोर्ड का उपयोग करके ठीक से काम करेगा। – ubuntudroid

उत्तर

2

आप Softkeyboard मजबूर कर सकते हैं का उपयोग करके दिखाया जा सकता है:

 

InputMethodManager im = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
im.showSoftInput(myView, InputMethodManager.SHOW_FORCED); 
 
+0

कोई भी SHOW_FORCED में बदल नहीं जाता है।अनुरोध फोकस(); संपादन पर लेकिन यह भी काम नहीं किया। – ang

+0

काम नहीं कर रहा है! (एंड्रॉइड 4.2) –

4

निम्नलिखित कोड मेरे लिए काम करता है:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

मैं एक onkeyup हैंडलर में इस कोड का उपयोग जब मैं "मेनू प्रेस "बटन। इसके बजाय visibility="invisible" का उपयोग कर आप अपने EditText पर android:alpha="0" सेट कर सकते हैं की

InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT); 
+1

काम नहीं कर रहा है! (एंड्रॉइड 4.2) –

+0

यह अभी भी मेरे लिए काम करता है। और एंड्रॉइड 4.4 पर भी। – miha

+1

क्या उस मामले में किसी निश्चित प्रकार के इनपुट को मजबूर करने का कोई तरीका है? केवल अंक की तरह .. 'setRawInputType' –

2

अपने दृश्य के लिए नरम कुंजीपटल सक्षम करना सुनिश्चित करें:

setFocusable(true); 
setFocusableInTouchMode(true); 

फिर कहते हैं। तो आप अभी भी एक EditText जरूरत है, लेकिन यह दिखाई नहीं देता है और आप से एक onKeyListener()

+0

काम करने में imeType सेट कर सकते हैं! (एंड्रॉइड 4.2) –

0

नोट softkeyboard से इनपुट प्राप्त कर सकते हैं कि अगर आप लैंडस्केप मोड में काम कर रहे हैं, मुलायम इनपुट का अपना पाठ इनपुट सब को बर्बाद कर क्षेत्र का निर्माण करेगा आपका कड़ी मेहनत आप इस व्यवहार को रोक सकते हैं:

// This makes us remain invisible when in landscape mode. 
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

अब यदि आपने एक अदृश्य संपादन टेक्स्ट सेट अप किया है तो यह आपके बनेगा।

संबंधित मुद्दे

 संबंधित मुद्दे