অ্যান্ড্রয়েড: আমি কীভাবে নরম কীবোর্ডকে আমার দৃষ্টিভঙ্গিটি আটকাতে বাধা দেব?


385

আমার অ্যাপের নীচে আমার একটি উল্লম্ব স্লাইডিং ড্রয়ার রয়েছে। নরম কীবোর্ড খুললে, এটি ড্রয়ারের জন্য ট্যাবটিকে ধাক্কা দেয়, তাই এটি কীবোর্ডের উপরে বসে। আমি কীবোর্ডটি দেখানোর পরে লুকিয়ে থাকা, পর্দার নীচে থেকে যেতে চাই actually

অন্য কেউ এই সমস্যা চালায়? কিভাবে এটি ঠিক করতে জানেন?


1
হাই, আমি একই সমস্যায়
পড়ছি

1
এই প্রশ্নটি এখানে নকল করা হয়েছে: stackoverflow.com/questions/5516216/…
ওয়ান্ডার ওয়ার্কার

উত্তর:


654

আপনি কেবল আপনার ক্রিয়াকলাপের ট্যাগের অভ্যন্তরে আপনার ক্রিয়াকলাপের windowSoftInputModeপতাকাটি adjustPanআপনার AndroidMainfest.xmlফাইলে স্যুইচ করতে পারেন ।

আরও তথ্যের জন্য সরকারী ডকুমেন্টেশন চেক করুন ।

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

43
আমি ভিউটি প্যান করতে চাই না, আমি চাই এটি যেখানে স্থির থাকবে এবং কীবোর্ডটি যা কিছু কভার করবে তা ঠিক আছে।
ক্রিস্টোফার পেরি

5
প্যান করার মাধ্যমে এর অর্থ হ'ল যে টাইপটি আপনি টাইপ করছেন সেই দৃশ্যটি দৃশ্যমান করতে ভিউ স্ক্রোল করা হবে। অন্য কথায়, যদি কেবল প্রদর্শিত কীবোর্ডটি ফোকাস করা ভিউটি কভার না করে তবে এটি স্থির থাকবে।
আলেকজান্ডার ওলেনিকভ

18
আমি একই সমস্যা সম্মুখীন হচ্ছি। ম্যানিফায়স্ট ফাইলটিতে উইন্ডোসফট ইনপুটমোড পতাকাটিকে "অ্যাডজাস্টপ্যান" তে পরিণত করেছে bকিন্তু কাজ করছে না। এটি কীভাবে সমাধান করবেন
সুব্রত

20
স্ক্রিনের নীচে একটি সারি বোতাম এবং তাদের উপরে একটি স্ক্রোলভিউ থাকার ক্ষেত্রে আমার সহায়তা করে না। উইন্ডোসফট ইনপুটমোডে মানটি নির্বিশেষে বোতামগুলি ধাক্কা দেয়।
আর্টেম রাশাকোভস্কিই

3
একটি খণ্ডে কাজ না। খণ্ডে এটি কীভাবে করবেন?
প্রশান্ত দেববাদ্বর

175

উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করেনি, তবে এটি কৌশলটি করেছে:

android:windowSoftInputMode="adjustNothing"

6
এটি এর উচ্চতাটিকে পুনরায় গণনা করার জন্য বিন্যাস তৈরি না করে কীবোর্ডকে ওভারলেলিং সামগ্রী প্রদর্শিত করে।
রিইনহার্ড

13
এটি কীবোর্ডের বিষয়বস্তুটিকে ধাক্কা দেওয়ার বিষয়টি সমাধান করে যদিও এটি আমি এবং ওপি অর্জন করতে চেয়েছিলাম।
ড্যানিয়েল ডগলাস

8
@ ডোম থেকে orrowণ নেওয়া আপনি getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);প্রোগ্রামটিমেটিকভাবে এই মানটি সেট করতে ব্যবহার করতে পারেন
ব্রোন ডেভিস

1
এই উত্তরটি আমার কাছে অন্য
জবাবগুলির

পারফেক্ট! এটি আমার ক্ষেত্রেও কাজ করছে। আমি একটি ডায়ালগ দেখিয়ে যাচ্ছি যার ভিতরে একটি সম্পাদনা রয়েছে। কথোপকথনটি খোলার সাথে সাথে কীবোর্ডটিও উপস্থিত ছিল। আমি "অ্যাডজাস্টপ্যান" চেষ্টা করেছি, তবে এটি কীবোর্ডের উপস্থিতি বৈশিষ্ট্যটিকে অবরুদ্ধ করেছে। সুতরাং, "অ্যাডজাস্টনিথিং" আমার ক্ষেত্রে আরও ভাল কাজ করেছে।
sembozdemir

85

আমার ক্ষেত্রে, বোতামগুলি ধাক্কা দেওয়ার কারণটি ছিল তাদের উপরের ভিউটি হ'ল ScrollViewএবং এটি কী ধীরে ধীরে android:windowSoftInputModeআমার কী মান নির্ধারণ করছিল তা কীবোর্ডের উপরে চাপ দেওয়া বোতামগুলি ধসে পড়ে ।

আমি বোতামগুলির নীচের সারিটি এড়াতে সক্ষম হয়েছি যে বোতামগুলির উপরে বসে সেটিংস স্থাপন android:isScrollContainer="false"করে নরম কীবোর্ড দ্বারা চাপ দেওয়া হচ্ছে ScrollView


2
তবে এক্ষেত্রে নরম কীবোর্ড স্ক্রিনের কিছু অংশ জুড়ে এবং নিচে নামার কোনও উপায় নেই। দেখে মনে হচ্ছে কীবোর্ডের শীর্ষে নীচের প্যানেলটি দেখানোর জন্য কেবলমাত্র একটি উপায় আছে - কীবোর্ড খোলা থাকলে এটি লুকিয়ে রাখা হয় ...
দিমিত্রি

1
এই হল! এই সেটিংটি আমার মতে মন্তব্য করা খুব আকর্ষণীয়, যেমনটি "অ্যাডজাস্টনিথিং" না থাকা সম্পত্তির প্রভাবগুলি অর্জন করার একমাত্র উপায় আমি পেয়েছি!
রুপস

আমি এটি টেক্সটভিউয়ের সাথে দুর্দান্ত টিএনএক্স ওয়ার্কিংয়ের সাথে ব্যবহার করছি
সুনীল চৌধুরী চৌধুরী

2
@ আর্টেম রাশাকোভস্কিই আমি জানি না আপনি কে, তবে এই সমাধানের জন্য আমি আপনাকে ভালবাসি। অনেক ধন্যবাদ.
লেভ

1
@ আর্টেম রাশাকোভস্কি এটি পুরোপুরি কার্যকরভাবে কাজ করে। অনেক ধন্যবাদ.
স্কাইপডোগ

72

onCreateআপনার ক্রিয়াকলাপের পদ্ধতিতে নিম্নলিখিত কোডটি রেখে আপনি এই বৈশিষ্ট্যটিকে গতিশীলভাবে যুক্ত করার চেষ্টা করতে পারেন :

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

এটি আমার পক্ষে কাজ করেছিল, কিন্তু তা:

android:windowSoftInputMode="adjustPan"

হয়নি।


আপনি কি android:windowSoftInputMode="adjustPan"AndroidManLive.xML এ যুক্ত করেছেন ?
হবিব পারওয়াদ

না, এটি আসলে আমার পক্ষে কোনও পার্থক্য তৈরি করে নি। কোডের প্রথম লাইনটি কাজটি করেছিল। :) @ হাবিব পেরওয়াদ
ডোম

আমি AndoidManLive.xML ফাইলে সেকেন্ডের লাইনটি যুক্ত করেছি। আমি মনে করি তার পরে এটি কাজ করেছিল। তাই শুধু জিজ্ঞাসা।
হবিব পেরওয়াদ

1
@ ডোম, getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);একটি খণ্ডে " " কীভাবে ব্যবহার করবেন ?
তুষার গোগনা

1
অবশেষে! এইটা কাজ করে! আমার একটি নিয়ামক ছিল (এর থেকে প্রসারিত FragmentActivity) এবং এর সাথে কিছু দর্শন সংযুক্ত ছিল (দর্শনগুলি থেকে প্রসারিত RelativeLayout)। ঝামেলা দৃশ্যে আমি controller.getWindow()...যেমন বলেছিলাম তেমনই করেছি। রচনাগুলি
আলা এম।

39

এই উত্তরগুলি এখানে আমাকে সাহায্য করেনি। সুতরাং আমি এটি চেষ্টা করেছি:

android:windowSoftInputMode="adjustResize"

এটি একটি কবজির মতো কাজ করেছে, এখন আমার অ্যাপের শিরোনামটি অদৃশ্য হবে না। এটি মসৃণ।


এটি আমার জন্য প্রায় পুরোপুরি কাজ করে। একমাত্র সমস্যা হ'ল কীবোর্ডের পরামর্শ বার / সারিটি এখনও আমার লেআউটটি আড়াল করে। আপনি কি এমন সমস্যার মুখোমুখি হয়েছিলেন?
সুফিয়ান

আমি এই সমস্যার মুখোমুখি হই নি। @ সুফিয়ান
অমলবিট

আমি তখন আর কোনও সমস্যার মুখোমুখি হইনি। এখন আমি নিশ্চিত নই। @ সুফিয়ান
অমলবিট

যারা একই ধরণের সমস্যার মুখোমুখি হতে পারে তাদের জন্য সম্ভবত এটি ছিল 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
@ স্কাইনেট আপনি একদম ঠিক বলেছেন! এটি একটি কাস্টম সমাধান যা আমি আমার নিজের সমস্যার জন্য ব্যবহার করেছি।
পেট্রো

7
আরে, উজ্জ্বল ছিল। যাইহোক, উদাহরণটি কীবোর্ডটি বন্ধ রয়েছে, একটি স্বল্প সময়ের (মিলি সেকেন্ড) রয়েছে যেখানে দৃশ্যটি দৃশ্যমান হয়ে যায়। সুতরাং সরাসরি দৃশ্যমানতা সেট করার পরিবর্তে, আমি view.post(Runnable runnable)সেখান থেকে দৃশ্যমানতাটি ব্যবহার করেছি এবং সেট করেছি। এটি আমার জন্য দুর্দান্ত
রেকর্ড হয়েছিল

9

যুক্ত করার জন্য কেবল একটি লাইন ...

যোগ android:windowSoftInputMode="stateHidden|adjustPan"আপনার প্রয়োজনীয় কার্যকলাপ manifest file

আমি সবেমাত্র সমাধান পেয়েছি :) :)


8

Xamarin ব্যবহারকারীদের জন্য এই কোডটি মেইনএকটিভিটি শ্রেণীর ক্রিয়াকলাপ বৈশিষ্ট্যে যুক্ত করুন,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

অথবা আপনি এই কোডটি Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)মেইনএকটিভিটি ক্লাসের অনক্রিয়েট পদ্ধতিতে যুক্ত করতে পারেন ।



7

এখনও পর্যন্ত উত্তরগুলি আমাকে সাহায্য করতে পারেনি কারণ আমার কাছে টেক্সটভিউয়ের নীচে একটি বোতাম এবং একটি পাঠ্য ইনপুট ক্ষেত্র রয়েছে (পাশাপাশি) যা কীবোর্ড দ্বারা আড়াল হতে থাকে, তবে এটি আমার সমস্যার সমাধান করেছে:

android:windowSoftInputMode="adjustResize"

7

ম্যানিফেস্ট ফাইলের 'ক্রিয়াকলাপ' এ নিম্নলিখিত কোড যুক্ত করুন।

android:windowSoftInputMode="adjustResize"

এটি ভাল কাজ করে। তবে, কেবল পরামর্শের জন্য, আপনি যখন শতাংশ ব্যবহার করেন তখন এটি ভাল কাজ করে না। কারণ এটি কিছু উপাদান পুনরায় সমন্বয় করে। সুতরাং, শতাংশের সাথে সীমাবদ্ধ উপাদানগুলি থাকলে আপনার সমস্যা হবে। পরিবর্তে wrap_content ব্যবহার করুন এবং এটি খুব ভাল কাজ করবে।
থিয়াগো সিলভা


6

এটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে

android:windowSoftInputMode="adjustNothing"

চেষ্টা করে দেখুন!


4

ঠিক আছে আমি এই উত্তরগুলি দেখেছি কিন্তু আমার ক্ষেত্রে আমি একই সমস্যার মধ্যে পড়েছি এবং খুব কার্যকর এবং সহজ সমাধানের মাধ্যমে আশ্রয় পেয়েছি যা আপনার এক্সএমএল ফাইলটিতে থাকা আপনার স্ক্রোলভিউ ট্যাগটিতে খুব ছোট নির্দোষ গুণকে যুক্ত করার সাথে জড়িত। এটাই

android:isScrollContainer="false"

শুভকামনা!



2

স্ক্রোল দেখার জন্য:

যদি android:windowSoftInputMode="stateHidden|adjustPan"আপনার অ্যান্ড্রয়েড ম্যানিফেস্টে যুক্ত করার পরে এবং এখনও কাজ করে না।

এটি প্রভাবিত হতে পারে কারণ যখন কীবোর্ড প্রদর্শিত হবে, এটি একটি স্ক্রোল ভিউতে হবে এবং যদি আপনার বোতাম / কোনও বস্তু আপনার স্ক্রোল ভিউতে না থাকে তবে অবজেক্টগুলি কীবোর্ডটি অনুসরণ করবে এবং তার অবস্থানটি সরিয়ে ফেলবে।

আপনার বোতামটি কোথায় রয়েছে তা আপনার এক্সএমএল পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে এটি আপনার স্ক্রোল ভিউ বন্ধনীটির নীচে রয়েছে এবং এটি বাইরে নেই।

আশা করি এটি সাহায্য করবে। : ডি


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

ক্রিয়াকলাপের মূল উইন্ডোটি নরম কীবোর্ডের জন্য জায়গা তৈরি করতে পুনরায় আকার দেবে না। বরং উইন্ডোটির সামগ্রীগুলি স্বয়ংক্রিয়ভাবে প্যান হয়ে যাবে যাতে বর্তমান ফোকাসটি কখনই কীবোর্ড দ্বারা অস্পষ্ট না হয় এবং ব্যবহারকারীরা সর্বদা তারা কী টাইপ করছেন তা দেখতে পারে can

android:windowSoftInputMode="adjustPan"

আপনি যা চেয়েছিলেন এটির জন্য এটি আরও ভাল সমাধান হতে পারে।



1

এই কোড আপনাকে সাহায্য করতে পারে। আপনার oncreateপদ্ধতিতে এটি ব্যবহার করুন ।

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

আমি এটি চেষ্টা করেছিলাম তবে আমার এমন সমস্যা রয়েছে যেখানে ভিউটি নীচের অংশটির কিছুটা অংশ কেটে ফেলেছে এবং উপরের সময়টিকে ওভারলেতে ভিউটি পুশ করে? কোন লেআউট পরিবর্তন হয় বা কোন প্রয়োজন সম্পর্কে কোন ধারণা? stackoverflow.com/questions/39909897/...
Lion789

1

আপনি প্রদর্শন করতে চান এমন ক্রিয়াকলাপের অধীনে আপনার ম্যানিফেস্ট ফাইলটিতে অন্তর্ভুক্ত করুন ut তবে পুরো স্ক্রীন ক্রিয়াকলাপটি ব্যবহার না করা নিশ্চিত করুন

android:windowSoftInputMode="adjustPan"


1

আমি যোগ করে আমার সমস্যাটি সমাধান করেছি

 android:windowSoftInputMode="adjustNothing" 

ম্যানিফেস্ট ফাইল অ্যাড।

এবং রিসাইক্লিউভিউস সীমাবদ্ধতা ইস্ক্রোলকন্টেইনারকে মিথ্যা বানানো।

android:isScrollContainer="false"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.