गतिविधि प्रारंभ पर प्रदर्शन से कीबोर्ड को रोकें


265

मेरे पास एक Edit Textइनपुट वाली गतिविधि है । जब गतिविधि आरंभ की जाती है, तो Android कीबोर्ड दिखाया जाता है। जब तक उपयोगकर्ता इनपुट पर ध्यान केंद्रित नहीं करता, तब तक कीबोर्ड कैसे छिपा रह सकता है?


93
अपने प्रकटन में<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


1
कैसे एक साथ उपयोग करने के लिए android:windowSoftInputMode="adjustPan"?
जाँनोस

4
@ जानोस एंड्रॉइड: windowSoftInputMode = "एडजस्टपैन | स्टेटहिड्ड"
एलेक्सी स्ट्रैच

इस टिप्पणी में जवाब, मैं जवाब के लिए देख रहा था: stackoverflow.com/a/23605510/6942602
korchix

जवाबों:


436

मुझे लगता है कि निम्नलिखित काम कर सकते हैं

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

मैंने इसे इस तरह की चीज़ के लिए पहले भी इस्तेमाल किया है।


क्या यह एक अंक-केवल कीपैड होने के लिए सेट करने का एक तरीका है? यानी 12Key कीबोर्ड?
मोहम्मद खमीस

@MohamedKhamis input.setRawInputType (configuration.KEYBOARD_12KEY);
ब्लॉकवाला

1
हाँ यह अभी भी काम करता है। @ सागरनायक आप कीबोर्ड को क्यों छिपाना चाहेंगे EditText? :) यह कीबोर्ड छिपाने के लिए है जब गतिविधि शुरू होती है जिसमें शामिल हैEditText
मार्टीनस

@Devealte 7 साल बाद और इसने मेरे लिए काम किया, क्या आपने इसे ऑनक्रिएट में रखा है?
दमास

@Dymas हाँ, और मैंने इसे कई महीने पहले ही निर्धारित कर दिया था :)
डेवलेटी

180

इसे भी आजमाएं -

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

अन्यथा, अपनी घोषणा फ़ाइल की गतिविधि में घोषणा करें -

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

आप पहले से ही उपयोग किया गया है, तो android:windowSoftInputModeजैसे एक मूल्य के लिए adjustResizeया adjustPan, आप की तरह दो मूल्यों को जोड़ सकते हैं:

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

जब भी उपयुक्त हो, यह कीबोर्ड को छिपा देगा, लेकिन कीबोर्ड को दिखाए जाने की स्थिति में गतिविधि दृश्य को पैन कर दें।


3
दोनों कोड में दिखाने के लिए धन्यवाद, और xml में! वास्तव में, यह सबसे सही उत्तर है! खासकर जब से शायद यह था कि 3 मिनट आपने दोनों तरीकों को लिखने में बिताए थे जो आपको पहले नहीं; ;-)
eric

34

थीम का उपयोग करके सभी गतिविधियों के लिए इसे छिपाएं

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

विषय निर्धारित करें

<application android:theme="@style/MyTheme">

इस वैश्विक दृष्टिकोण की तरह।
Rm558

1
यह काम किया क्योंकि मैं विभिन्न स्थानों पर विभिन्न विषयों का उपयोग कर रहा था
nmxprime

22

इन दो गुणों को अपने मूल लेआउट में जोड़ें (उदा: रैखिक लेआउट, सापेक्ष लेआउट)

android:focusable="false"
android:focusableInTouchMode="false" 

यह चाल चलेगा :)


2
यह मेरे लिए काम नहीं करता है, हालांकि trueजैक टी के जवाब के अनुसार, उन्हें काम करने के लिए सेट करना है । क्या हाल के संस्करणों में व्यवहार परिवर्तन हुआ था?
प्रोटिन

मेरे उत्तर के अलावा, आपको अन्य संपत्तियों की भी जांच करने की आवश्यकता है जो आपके पास पाठ में और संपादन पाठ के लिए हैं।
राजाओं का राजा

मेरे पास उनमें सबसे बुनियादी गुण हैं। मुझे समझ नहीं आता कि इन्हें सेट करने के लिए falseकाम क्यों करना चाहिए, क्योंकि विचार यह है कि एडिटटेक्स्ट बॉक्स से ध्यान हटाएं।
प्रोटीएन

हो सकता है कि यह पैरेंट लेआउट से दूर हो कर एडिटटेक्स्ट बॉक्स से ध्यान हटाए? लेकिन अब ऐसा नहीं है।
प्रोटीएन

13

इसे मेनिफ़ेस्ट फ़ाइल में घोषित करने का प्रयास करें

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >

11

यदि आप एपीआई स्तर 21 का उपयोग कर रहे हैं, तो आप editText.setShowSoftInputOnFocus (गलत) का उपयोग कर सकते हैं;



8

बस इसे अपनी मैनिफ़ेस्ट। Xml फ़ाइल में जोड़ें

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

तुम सब हो गया।


7

आप कोड की इन पंक्तियों को .xml लेआउट फ़ाइल के प्रत्यक्ष मूल लेआउट में भी लिख सकते हैं जिसमें आपको "समस्या" है:

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

उदाहरण के लिए:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


संपादित करें:

उदाहरण अगर EditText दूसरे लेआउट में समाहित है:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

कुंजी यह सुनिश्चित करने के लिए है कि EditText सीधे ध्यान देने योग्य नहीं है।
अलविदा! ;-)


6

मेरे लिए सबसे अच्छा समाधान, अपनी कक्षा पेस्ट करें

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}

3

कीबोर्ड को छिपाने का कार्य।

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

AndroidManifext.xml फ़ाइल में कीबोर्ड छिपाएँ।

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

3

@ उत्तर द्वारा स्वीकृत उत्तर का विस्तार करने के लिए:

प्रारंभिक जीवन चक्र की घटनाओं में से एक में अपनी गतिविधि से इसे कॉल करें:

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

कोटलिन उदाहरण:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

आप प्रत्येक तत्व के लिए यह सेट विशिष्ट विशेषता आज़मा सकते हैं

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

जब तत्व फोकस होगा तो कीबोर्ड नहीं दिखेगा


हालांकि यह लेखकों के सवाल का जवाब दे सकता है, लेकिन इसमें कुछ स्पष्ट शब्दों और / या प्रलेखन के लिंक का अभाव है। रॉ कोड स्निपेट अपने आसपास के कुछ वाक्यांशों के बिना बहुत मददगार नहीं हैं। आप यह भी पा सकते हैं कि कैसे एक अच्छा उत्तर लिखने में बहुत मददगार है। कृपया अपना उत्तर संपादित करें
निक


0

बस इसे अपनी गतिविधि पर जोड़ें:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.