क्या एंड्रॉइड को बदलने का कोई तरीका है: java वर्ग से windowSoftInputMode मान?


82

मैं अपने टैब के windowSoftInputModeलिए प्रत्येक टैब के लिए अलग-अलग गुण रखना चाहता हूं । जब आपके टैब की सभी हैंडलिंग एक ही गतिविधि से की जाती है, तो इस संपत्ति को जावा क्लास से कैसे एक्सेस करें?

क्या इस प्रकट संपत्ति को जावा कोड से एक्सेस करने का कोई तरीका है?

जवाबों:


124

किसी गतिविधि के लिए softInputMode को बदलने के लिए निम्नलिखित का उपयोग करें।

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

एक EditText के लिए softInput प्रकार बदलने के लिए निम्नलिखित का उपयोग करें।

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

धन्यवाद @Eliezer सुधार के लिए


20
इस setSoftInputMode विधि के लिए धन्यवाद ... यह वास्तव में मेरी मदद करता है ... अतिरिक्त जानकारी: जैसे गुणों का उपयोग करने के लिए adjustPanऔर adjustResizeआप WindowManager.LayoutParamsकक्षा के लिए जा सकते हैं , आप कई उपयोगी स्थिरांक पा सकते हैं जो setSoftInputModeविधि में उपयोग किए जा सकते हैं
प्राम

7
@ सुरेश बोरा i ने @ 66CLSjY जवाब और @aman को संयुक्त रूप से जोड़ा और अंत में मुझे यह मिल गया: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);मैंने पहले ही इसका परीक्षण कर लिया था, और वास्तव में काम करता है
हम्बर्टो कास्टेनेडा

1
यह सही उत्तर कैसे है? Developer.android.com/reference/android/view/… के अनुसार , पास करने के लिए केवल स्वीकार्य मूल्य Window#setSoftInputModeहैंWindowManager.LayoutParams.SOFT_INPUT_*
एलिएजर

4
@ 66CLSjY यह मेरे लिए काम नहीं करता है। क्या आप बता सकते हैं कि मुझे क्या याद आ रहा है? मैं इसे एक गतिविधि के अंदर कहता हूं: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);लेकिन कीबोर्ड अभी भी मेरे फ्रेमलैट को ऊपर धकेलता है, जो अन्य दृश्यों के शीर्ष पर है। लेकिन बस, अन्य विचार अपनी जगह पर बने हुए हैं। यह काम करता है, जब मैं इसे मेनिफेस्ट में जोड़ता हूं, लेकिन मैं इसे पूरी गतिविधि के लिए लागू नहीं करना चाहता।
तामेस कोजमारे

1
क्या आपने onCreate () में setContentView से पहले setSoftInputMode को कॉल किया था?
AjOnFire

36

प्रशम की टिप्पणी के अनुसार , मैंने ऐसा किया और इसने मेरी जान बचाई, उसके लिए धन्यवाद! EditTextऔर SoftWindowInputआप के साथ एक लेआउट है जब मोड काफी गाड़ी हैं ScrollViewऔर आप इसे गतिशील रूप से भरने कर रहे हैं।

चूँकि मैं इस पोस्ट से गुज़रा था, लेकिन अन्य उत्तर / टिप्पणियों (जैसे कि एक प्रशसन) को पढ़ना जारी रखा था, मैंने इसे एक नई पोस्ट में लिखने का फैसला किया।

मेरे द्वारा उपयोग किए गए कोड के नीचे ScrollView:

Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

7
हाय अमन, तुम्हारा जवाब यहाँ पढ़ना थोड़ा मुश्किल है। मैं देख सकता हूं कि आप प्रशान के बहुत आभारी हैं, लेकिन क्या आप कुछ व्यक्तिगत टिप्पणियों को स्पष्ट कर सकते हैं और सिर्फ यह बता सकते हैं कि यह कोड क्या हल करने में मदद करेगा? धन्यवाद।
टैरिन पूर्व

1
हम्म, पैन को समायोजित करने के लिए कम से कम सेट करने के लिए काम नहीं करता है। यह केवल तभी काम करता है जब मैं इसे प्रकट में रखता हूं।
Ixx 15

यह एप्लिकेशन को क्रैश कर रहा है।
फ़र्रख जावेद

10

मेरा लक्ष्य टैब के लिए दो अलग-अलग मोड का उपयोग करना है। मोड हैं SOFT_INPUT_ADJUST_RESIZEऔर SOFT_INPUT_ADJUST_NOTHING

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

ऊपर की कोड लाइन बस अपने आप से काम नहीं करती है। एप्लिकेशन हमेशा एक राज्य में व्यवहार करता है ADJUST_NOTHING। हालाँकि, अगर AndroidManifest.xml फ़ाइल windowSoftInputMode="adjustResize"में <activity>टैग में डाला गया है , तो ऐप विंडो को डिफ़ॉल्ट रूप में बदल दिया जाता है। इसके अतिरिक्त, जब आप निम्नलिखित पंक्ति कहते हैं

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

यह अपेक्षा के अनुरूप व्यवहार करेगा और कुछ भी आकार परिवर्तन नहीं होगा।

उत्तर में पुनश्च सुधार


1
मुझे RESIZE और NOTHING के बीच फेरबदल करने की जरूरत है कि मैं ऐसा कैसे कर सकता हूं एक बार जब मैं प्रोग्रामिक रूप से कुछ भी नहीं करता हूं तो यह आकार बदलने के लिए नहीं बदलता है।
तरन्नमीत सिंह

1
यह वास्तव में अच्छा अवलोकन है। मूल रूप windowSoftInputMode="adjustResize"से मैनिफ़ेस्ट में सेटिंग इस ध्वज को बाद में संभालने में मदद करती है। विशेष रूप से ऐसे परिदृश्य में, जहाँ आपके पास ज्यादातर एकल गतिविधि में टुकड़े होते हैं। इसलिए, कोई गतिशील रूप से प्रोग्राम की इनपुट स्थिति को प्रोग्राम से SOFT_INPUT_ADJUST_RESIZE वापस SOFT_INPUT_ADJUST_NOTHING मांग पर स्विच करके बदल सकता है । अच्छा है!
सूद 7००

1

Xamarin Android में आप इस तरह से प्रोग्राम कर सकते हैं

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }

0

आप निम्न कोड को प्रोग्रामेटिक रूप से उपयोग कर सकते हैं

android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

धन्यवाद दीपक

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