एंड्रॉइड: मैं अपने विचार को बढ़ाने से सॉफ्ट कीबोर्ड को कैसे रोक सकता हूं?


385

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

किसी और को इस मुद्दे में भाग? जानिए इसे कैसे ठीक करें?


1
नमस्ते, मैं एक ही समस्या है जो झंडा आप फ़ाइल में इस्तेमाल किया है, क्या आप मुझे उस के साथ मदद कर सकते हैं
Nixit पटेल

1
इस प्रश्न को यहाँ डुप्लिकेट किया गया है: stackoverflow.com/questions/5516216/…
WonderWorker

जवाबों:


654

आप बस अपनी गतिविधि टैग के अंदर अपनी गतिविधि के windowSoftInputModeझंडे को adjustPanअपनी AndroidMainfest.xmlफ़ाइल में बदल सकते हैं ।

अधिक जानकारी के लिए आधिकारिक दस्तावेज देखें ।

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>

43
मुझे दृश्य को पैन नहीं करना है, मैं चाहता हूं कि यह स्थिर रहे जहां यह है, और बस कीबोर्ड को कवर करना है जो भी इसे कवर करने जा रहा है।
क्रिस्टोफर पेरी

5
पैन करने से यह अर्थ होता है कि उस दृश्य को देखने के लिए स्क्रॉल किया जाएगा, जिसे आप देख रहे हैं। दूसरे शब्दों में अगर बस दिखाई दिया कीबोर्ड ध्यान केंद्रित नहीं करता है तो यह स्थिर रहेगा।
अलेक्जेंडर ओलेनिकोव

18
मैं भी ऐसी ही समस्या का सामना कर रहा हूँ। मेनिफ़ेस्ट फ़ाइल में "adjustPan" को windowSoftInputMode ध्वज बनाया। लेकिन काम नहीं कर रहा है। इसे कैसे हल करें
सुब्रत

20
स्क्रीन के नीचे बटन की एक पंक्ति और उनके ऊपर एक स्क्रॉल दृश्य होने के मेरे मामले में मदद नहीं करता है। बटन धक्का दिया जाता है कोई बात नहीं खिड़की में क्या मूल्य है।
आर्टेम रसाकोवस्की

3
एक टुकड़े में काम नहीं कर रहा है। इसे खंड में कैसे करें?
प्रशांत देवबदवार

175

मेरे जवाब में से किसी ने भी काम नहीं किया, लेकिन इसने यह काम किया:

android:windowSoftInputMode="adjustNothing"

6
यह कीबोर्ड को ओवरलेइंग कंटेंट दिखाता है, बिना लेआउट को बनाए हुए इसे ऊँचाई तक ले जाने के लिए।
रीनहार्ड

13
यह कीबोर्ड के मुद्दे को हल करता है जो सामग्री को ऊपर धकेलता है जो कि मैं और ओपी हासिल करना चाहता था।
डैनियल डगलस

8
@Dom से उधार लेकर आप getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);इस मूल्य को प्रोग्रामेटिक रूप से सेट करने के लिए उपयोग कर सकते हैं
ब्रॉन डेविस

1
यह अन्य उत्तरों के विपरीत मेरे लिए काम करता है (जेली बीन 4.1)
वायरस 721

उत्तम! यह मेरे मामले में भी काम कर रहा है। मैं एक डायलॉग दिखा रहा हूं, जिसमें एक एडिटटेक्स्ट है। जैसे ही डायलॉग खुलता है, कीबोर्ड भी दिखने लगा था। मैंने "समायोजनपैन" की कोशिश की है, लेकिन इसने कीबोर्ड दिखने की सुविधा को अवरुद्ध कर दिया है। इसलिए, "एडजस्टमेंटिंग" ने मेरे मामले में बेहतर काम किया।
सेम्बोज्डमीर

85

मेरे मामले में, बटन को धक्का देने का कारण यह था क्योंकि उनके ऊपर का दृश्य एक था ScrollView, और यह कीबोर्ड के ऊपर धकेल दिए गए बटन से ढह गया, इससे कोई फर्क नहीं पड़ता कि android:windowSoftInputModeमैं क्या मूल्य निर्धारित कर रहा था।

मैं बटन की मेरी निचली पंक्ति से बचने में सक्षम था android:isScrollContainer="false", ScrollViewजो कि बटन के ऊपर से बैठकर सॉफ्ट कीबोर्ड द्वारा पुश किया गया था ।


2
लेकिन इस मामले में सॉफ्ट कीबोर्ड स्क्रीन के हिस्से को कवर करता है और नीचे स्क्रॉल करने का कोई तरीका नहीं है। ऐसा लगता है कि कीबोर्ड के शीर्ष पर दिखाने के लिए नीचे के पैनल को रोकने का केवल एक ही तरीका है - कीबोर्ड के खुले होने पर उसे छुपाना ...
दिमित्री

1
यह बात है! यह सेटिंग मेरे विचार से टिप्पणी करने के लिए बहुत दिलचस्प है, जैसा कि मैंने एकमात्र तरीका "एडजस्टिंग" के गुणों को लापता संपत्ति को प्राप्त करने के लिए पाया है!
बर्बाद

मैं इसका इस्तेमाल टेक्स्टव्यू वर्किंग ग्रेट tnx के साथ करता हूं
सुनील चौधरी

2
@Artem Russakovskii मुझे नहीं पता कि आप कौन हैं, लेकिन मैं आपको इस समाधान के लिए प्यार करता हूं। बहुत बहुत धन्यवाद।
लेव

1
@Artem Russakovskii यह पूरी तरह से काम करता है। बहुत बहुत धन्यवाद।
स्काइपडॉग

72

आप onCreateअपनी गतिविधि की विधि में निम्नलिखित कोड डालकर, इस विशेषता को गतिशील रूप से जोड़ने का प्रयास कर सकते हैं :

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

यह मेरे लिए काम किया, लेकिन वह:

android:windowSoftInputMode="adjustPan"

फ्लॉप।


क्या आपने android:windowSoftInputMode="adjustPan"AndroidManifest.xml में जोड़ा है ?
हबीब परवाद

नहीं, क्योंकि यह वास्तव में मेरे लिए कोई फर्क नहीं पड़ा। कोड की पहली पंक्ति ने काम किया। :) @ हबीबपेरवाड
डोम

मैंने AndoidManifest.xml फ़ाइल में सेकंड लाइन जोड़ी। मुझे लगता है कि इसके बाद केवल इसने काम किया। तो बस पूछा।
हबीब परवाद

1
@, getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);एक टुकड़े में " " का उपयोग कैसे करें ?
तुषार गोगना

1
आखिरकार! यह काम! मेरे पास एक नियंत्रक था (विस्तार से FragmentActivity) और उससे जुड़े कुछ विचार (विचार इससे मिलते हैं RelativeLayout)। इसलिए परेशानी भरे दृश्य में मैंने ऐसा किया controller.getWindow()...जैसा आपने कहा। काम करता है
एम।

39

यहाँ इन जवाबों ने मेरी मदद नहीं की। इसलिए मैंने यह कोशिश की:

android:windowSoftInputMode="adjustResize"

यह एक आकर्षण की तरह काम करता है, अब मेरे ऐप का हेडर गायब नहीं होता है। इसकी चिकनी।


यह लगभग मेरे लिए पूरी तरह से काम करता है। एकमात्र समस्या यह है कि कीबोर्ड का सुझाव बार / पंक्ति अभी भी मेरे लेआउट को छुपाता है। क्या आपने इस तरह के मुद्दे का सामना किया?
सूफियान

मैंने इस मुद्दे का सामना नहीं किया है। @ सूफियान
amalBit

मैंने तब किसी मुद्दे का सामना नहीं किया था। अब मुझे यकीन नहीं हो रहा है। @ सूफियान
अमलबिट

उन लोगों के लिए जो इसी तरह के मुद्दे का सामना कर सकते हैं, यह शायद इसकी वजह से था TabLayout। एक बार जब मैं इसकी दृश्यता निर्धारित कर चुका था, तो समस्या चली गई थी View.GONE। यह मेरे लेआउट को नया स्वरूप देने का समय हो सकता है।
सूफियान

13

एक टुकड़ा में इस प्रोग्राम को करने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं

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

इस पर रखें।)


11

भविष्य के पाठकों के लिए।

मैं इस मुद्दे पर विशिष्ट नियंत्रण चाहता था, इसलिए मैंने यही किया:

एक खंड या गतिविधि से, अपने अन्य विचारों को छिपाएं (जो कि कीबोर्ड के ऊपर होने के दौरान आवश्यक नहीं हैं), फिर उन्हें इस समस्या को हल करने के लिए पुनर्स्थापित करें :

            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);

                    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    //ok now we know the keyboard is up...
                        view_one.setVisibility(View.GONE);
                        view_two.setVisibility(View.GONE);

                    }else{
                    //ok now we know the keyboard is down...
                        view_one.setVisibility(View.VISIBLE);
                        view_two.setVisibility(View.VISIBLE);

                    }
                }
            });

1
@Skynet तुम बिल्कुल सही हो! यह एक कस्टम समाधान था जिसका उपयोग मैंने अपनी समस्या के लिए किया।
पेट्रो

7
अरे, यह शानदार था। हालांकि, उदाहरण के लिए कीबोर्ड बंद है, एक छोटी अवधि (मिलीसेकंड) है जहां दृश्य को दृश्यमान पर स्विच किया जाता है। इसलिए सीधे दृश्यता सेट करने के बजाय, मैंने view.post(Runnable runnable)वहां से दृश्यता का उपयोग किया और सेट किया। यह मेरे लिए बहुत अच्छा निकला
daisura99

9

बस एक ही लाइन जोड़ी जानी है ...

android:windowSoftInputMode="stateHidden|adjustPan"अपनी आवश्यक गतिविधि में जोड़ेंmanifest file

मैं बस हल हो गया :) :)


8

Xamarin उपयोगकर्ताओं के लिए यह कोड MainActivity क्लास की गतिविधि विशेषता में जोड़ता है,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

या आप इस कोड Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)को मेनएक्टिविटी क्लास के ऑनक्रैट विधि में जोड़ सकते हैं ।



7

अब तक जवाबों ने मेरी मदद नहीं की क्योंकि मेरे पास एक बटन और एक textInput फ़ील्ड है (नीचे की ओर) textView के नीचे जो कीबोर्ड द्वारा छिपा हुआ रहता है, लेकिन इससे मेरा मुद्दा हल हो गया है:

android:windowSoftInputMode="adjustResize"

7

मेनिफेस्ट फ़ाइल की 'गतिविधि' के लिए निम्न कोड जोड़ें।

android:windowSoftInputMode="adjustResize"

यह अच्छा काम करता है। हालांकि, सिर्फ सलाह देने के लिए, जब आप प्रतिशत का उपयोग करते हैं तो यह अच्छी तरह से काम नहीं करता है। क्योंकि यह कुछ तत्वों को रीड करता है। इसलिए, यदि आपके पास प्रतिशत के साथ बाधा तत्व हैं तो आपको समस्या होगी। इसके बजाय wra_content का उपयोग करें और यह बहुत अच्छी तरह से काम करेगा।
थियागो सिल्वा


6

यह सबसे अच्छा था जिसने मेरे लिए काम किया

android:windowSoftInputMode="adjustNothing"

कोशिश करो!


4

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

android:isScrollContainer="false"

सौभाग्य!



2

स्क्रॉल दृश्य के लिए:

अगर जोड़ने के बाद android:windowSoftInputMode="stateHidden|adjustPan" आपके एंड्रॉइड मैनिफेस्ट में और फिर भी काम नहीं करता है।

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

अपने xml को देखें कि आपका बटन कहाँ है और सुनिश्चित करें कि यह आपके स्क्रॉल व्यू ब्रैकेट के नीचे है और इससे बाहर नहीं है।

आशा है कि यह मदद करता है। : डी


2

मेरे मामले में मुझे छुपा रहने के लिए कीबोर्ड की आवश्यकता थी और बटन के क्लिक के बाद मेरे लेआउट को समायोजित करने की आवश्यकता है, इसलिए मैंने इस कमांड को मेनिफ़ेस्ट में जोड़ दिया और यह सुपर सही हो गया।

android:windowSoftInputMode="stateHidden|adjustResize"

2

जब आप कीबोर्ड खोलना चाहते हैं तो दृश्य छिपाना चाहते हैं।

इसे अपनी गतिविधि में प्रकट फ़ाइल में जोड़ें

android:windowSoftInputMode="stateHidden|adjustPan"

2

उनमें से किसी ने मेरे लिए काम नहीं किया, यह कोशिश करो

 private void scrollingWhileKeyboard() {
    drawerlayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            Rect r = new Rect();
            try {
                drawerlayout.getWindowVisibleDisplayFrame(r);
                int screenHeight = drawerlayout.getRootView().getHeight();
                int keypadHeight = screenHeight - r.bottom;
                if (keypadHeight > screenHeight * 0.15) {
                    tabLayout.setVisibility(View.GONE);
                } else {
                    tabLayout.setVisibility(View.VISIBLE);
                }
            } catch (NullPointerException e) {

            }
        }
    });

}

1

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

android:windowSoftInputMode="adjustPan"

यह एक बेहतर समाधान हो सकता है कि आप क्या चाहते हैं।



1

यह कोड आपकी मदद कर सकता है। इसे अपनी oncreateविधि में प्रयोग करें ।

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

मैंने यह कोशिश की, लेकिन मुझे ऐसे मुद्दे मिल रहे हैं जहां दृश्य दृश्य के नीचे के हिस्से से थोड़ा सा कट जाता है और ऊपर के समय को देखने के लिए दृश्य को धक्का देता है? लेआउट के परिवर्तन या क्या आवश्यक है पर कोई विचार? stackoverflow.com/questions/39909897/…
सिंह 789

1

गतिविधि के तहत अपनी मैनिफ़ेस्ट फ़ाइल में शामिल करें जिसे आप प्रदर्शित करना चाहते हैं। लेकिन सुनिश्चित करें कि पूर्ण स्क्रीन गतिविधि का उपयोग न करें

android:windowSoftInputMode="adjustPan"


1

मैंने जोड़कर अपनी समस्या हल कर ली है

 android:windowSoftInputMode="adjustNothing" 

प्रकट फ़ाइल जोड़ में।

और Recyclerviews को बाधा बना रहा है।

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