एंड्रॉइड ऑन-स्क्रीन कीबोर्ड ऑटो पॉपिंग अप


140

मेरे एक ऐप में एक "ओपनिंग स्क्रीन" (मूल रूप से एक मेनू) है, जिसमें EditTextकई Buttonएस हैं। समस्या यह है कि मेरे कई उपयोगकर्ता रिपोर्ट कर रहे हैं कि जब वे ऐप को खोलते हैं तो यह स्वचालित रूप से ऑन-स्क्रीन कीबोर्ड को पॉपअप करता है, यहां तक ​​कि उनके बिना भी टच नहीं होता है EditText। जहां तक ​​मैं बता सकता हूं, ये सभी उपयोगकर्ता एचटीसी हीरो का उपयोग कर रहे हैं ।

क्या यह 1.5 में बग है? क्या मैं इसके बारे में कुछ भी कर सकता हूँ?


1
यदि यह बग है, तो यह विशेष रूप से स्प्रिंट हीरो में है। स्प्रिंट के पास बिकने वाले हेरोस पर एंड्रॉइड का एक छोटी गाड़ी संस्करण है और वे इसके लिए बगफिक्स को बाहर करने की किसी भी जल्दी में नहीं लगते हैं। स्प्रिंट हेरोस और अन्य सभी Android उपकरणों के बीच व्यवहार में बहुत अंतर हैं। जहाँ तक मुझे हीरो के अन्य संस्करणों के बारे में पता है, जैसे कि यूरोप के लोगों के पास ये मुद्दे नहीं हैं।
मार्क बी

दुर्भाग्य से यूरोप में हीरो के यहाँ प्रमुख मुद्दे हैं, वे बिल्ड नंबर के आधार पर बदलते हैं लेकिन हम 3 - 4 प्रमुख बग्स में आ गए हैं।
डोनाल्ड रैफरटी

जवाबों:


279

जब उपयोगकर्ता किसी EditText में क्लिक करता है तो कीबोर्ड केवल पॉप अप करता है यह सुनिश्चित करने के लिए आप गतिविधि की ऑनक्रिएट विधि में कोड की निम्न पंक्ति का उपयोग कर सकते हैं

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

यह मेरे लिए काम नहीं करता है (2.2 MyTouch 3G)। मेरी ऑनक्रिएट () विधि में, मैं setSoftInputMode () को कॉल करता हूं। EditText अभी भी कीबोर्ड को दिखाता है :(
Nate

इसने मेरे लिए काम किया। मैं एंड्रॉइड 2.3.4 चला रहा हूं, और <उपयोग- sdk एंड्रॉइड: minSdkVersion = "3" />
सैंडी

78
या उपयोग android:windowSoftInputMode="stateHidden"की तरह यहाँ
Swato

तो जो मुझे भ्रमित कर रहा है वह यह है कि मेरे पास एक लॉगिन गतिविधि है जो पहले से ही ठीक कीबोर्ड को छिपाती हुई प्रतीत होती है। मैंने अब एक रजिस्टर गतिविधि भी की है, लेकिन कीबोर्ड डिफ़ॉल्ट रूप से पॉप अप हो रहा है। तो लॉगिन कैसे इससे बच रहा है? मुझे लॉगिन गतिविधि में setSoftInputMode, या activity.xml में windowSoftInputMode विशेषता नहीं मिल रही है।
चकी

हमेशा काम नहीं करता है: कुछ उपकरणों पर, SOFT_INPUT_STATE_ALWAYS_HIDDEN त्रुटि का कारण बनता है कि एक संपादित पाठ जो गतिविधि में अंतिम नहीं है, जिससे नरम कीबोर्ड दिखाई नहीं दे सकता है। मेनिफ़ेस्ट में "android: windowSoftInputMode =" StateHidden "" का भी उपयोग समान प्रभाव डालता है। डेवलपर डॉक्स बताता है कि सॉफ्ट कीबोर्ड स्वचालित रूप से तब तक दिखाई नहीं देगा जब तक कि उसे मजबूर न किया जाए, लेकिन यह सिर्फ सादा गलत है।

85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

यह एंड्रॉइड 3.0, 3.1, 3.2, 4.0 के लिए काम करता है - सम्पादक द्वारा प्रयुक्त संकलन (ग्रहण 3.7)

EACH गतिविधि के लिए अपने एप्लिकेशन की प्रकट XML फ़ाइल में 'windowSoftInputMode = "StateHidden" को उस स्थान पर रखें जहाँ आप सॉफ़्टवेयर कीबोर्ड के छिपे रहने की इच्छा रखते हैं। इसका मतलब यह है कि कीबोर्ड अपने आप नहीं आएगा और उपयोगकर्ता को' क्लिक 'करना होगा। पाठ क्षेत्र इसे लाने के लिए। मैंने लगभग एक घंटे तक किसी ऐसी चीज की तलाश की, जिससे मुझे लगे कि मैं साझा करूंगा।


सबसे अच्छा समाधान जो मैंने अब तक पाया है। कीबोर्ड को खोले बिना फ़ील्ड पर ध्यान केंद्रित करता है। 4.1.2 के साथ नेक्सस एस पर काम करता है
एलेक्सिस्मिनिन

1
android: windowSoftInputMode = "StateHidden | AdjustNothing" भी मददगार है अगर आप टुकड़े का उपयोग कर रहे हैं और आप कीबोर्ड को लेआउट में बदलाव नहीं करना चाहते हैं
Whyoz

6

इसे अपने AndroidManifest.xml में जोड़ें :

android:windowSoftInputMode="stateHidden|adjustResize"

यह पूरी तरह से काम करता है। :)


1
जवाब के लिए धन्यवाद। मुझे खेद है, अब मैं कीबोर्ड को कैसे कॉल कर सकता हूं? कॉल करने पर यह दिखाई नहीं देगा requestFocus()
ताकसी तोकुगावा YD

6

यह कोड सभी Android संस्करणों पर काम करेगा:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

प्लस 1 यह बताने के लिए कि कौन-सा पॉप अप है और कौन सा नहीं
डेमॉन ऐप प्रोग्रामर

4

इसे XML के पेरेंट लेआउट में जोड़ें।

android:focusable="true" 
android:focusableInTouchMode="true"

यह सुनिश्चित करता है कि गतिविधि शुरू होने पर फोकस एडिटटेक्स्ट पर न हो।


3

आप गतिविधि के onCreate () विधि में या तो इसका उपयोग कर सकते हैं

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

या AndroidManifest.xml में गतिविधि टैग में इस कोड को पेस्ट करें

android:windowSoftInputMode="stateVisible"

2
मुझे लगता है कि आप का अर्थ है "राज्यविहीन" के बजाय "स्टेटहाइड्ड"।
स्टीवेह्स

2

आप गतिविधि टैग के तहत Android Mainfest.xml में कोड की एक पंक्ति जोड़ सकते हैं

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

यह आपकी मदद कर सकता है।


1

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

इसे ठीक करने के लिए, स्पष्ट रूप से कहीं और ध्यान केंद्रित करें। यदि एडिटटेक्स्ट के अलावा किसी अन्य चीज़ पर ध्यान केंद्रित किया जाता है, तो ऑन-स्क्रीन कीबोर्ड दिखाई नहीं देगा।

क्या आपने एमुलेटर में एंड्रॉइड 1.5 चलाकर इसका परीक्षण करने की कोशिश की है?


मैंने इसे एमुलेटर में आज़माया है (और यह सुनिश्चित करने के लिए फिर से किया कि मैं पागल नहीं था)। यह "सही" कार्य करता है (जिसका अर्थ है कोई कीबोर्ड पॉप-अप नहीं)। इसके अलावा, जब मैंने मूल रूप से यह लिखा था कि मेरा G1 1.5 चल रहा था और यह इस तरह से काम नहीं करता था (जब वे कीबोर्ड "छिपा हुआ" था)।
जेरेमी लोगन

मैं शर्त लगाता हूं कि शुरुआती फोकस से इसका कुछ लेना-देना है। हो सकता है कि यह एचटीसी हीरो के लिए कुछ खास हो, लेकिन मैं कोशिश करूंगा कि फोकस को स्पष्ट रूप से किसी और चीज में सेट करूं और यह देखूं कि क्या यह आपके उपयोगकर्ताओं के लिए इसे ठीक करता है।
मार्क बी

क्या "कुछ भी नहीं" पर ध्यान देने का कोई तरीका है?
जेरेमी लोगन

1
यह मेरे लिए काम नहीं करता है (2.2 MyTouch 3G)। मेरी ऑनक्रिएट () विधि में, मैं स्पष्ट रूप से एक बटन पर requestFocus () कहता हूं, जो कि दृश्य में दूसरा विजेट है। EditText अभी भी कीबोर्ड को दिखाता है :(
Nate

1

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

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

या सेट android:windowSoftInputMode="stateHidden"में <activity tagअंदरAndroidManifest.xml


1

इसे शामिल करें जहां आयात शीर्ष पर हैं:

import android.view.WindowManager;

OnCreate भाग पर यह कोड जोड़ें:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* यह Android.xamarin और FindFocus () के लिए है - यह पदानुक्रम में इस दृश्य को देखने के लिए खोजता है जो वर्तमान में फोकस है, जैसा कि मेरे पास _enterPin.RequestFocus है () उपरोक्त कोड से पहले इस प्रकार यह _enterPin EditText * के लिए कीबोर्ड है

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