Android: How do I prevent the soft keyboard from pushing my view up?

AndroidLayoutKeyboardView

Android Problem Overview


I have a vertical sliding drawer at the bottom of my app. When the soft keyboard opens, it pushes the tab for the drawer up, so it sits atop the keyboard. I actually want it to remain at the bottom of the screen, becoming hidden when the keyboard is shown.

Anyone else run into this issue? Know how to fix it?

Android Solutions


Solution 1 - Android

You can simply switch your Activity's windowSoftInputModeflag to adjustPan in your AndroidMainfest.xml file inside your activity tag.

Check the official documentation for more info.

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

If your container is not changing size, then you likely have the height set to "match parent". If possible, set the parent to "Wrap Content", or a constraint layout with constraingts to top and bottom of parent.

The parent container will shrink to fit the available space, so it is likely that your content should be inside of a scolling view to prevent (depending on the phone manufacturer and the layout choosen...)

  1. Content being smashed together
  2. Content hanging off the screen
  3. Content being inacccessable due to it being underneath the keyboard

even if the layout it is in is a relative or constraint layout, the content could exhibit problems 1-3.

Solution 2 - Android

None of the answers worked for me, but this did the trick, add this attribute to the activity tag in your AndroidManifest.xml:

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

Solution 3 - Android

In my case, the reason the buttons got pushed up was because the view above them was a ScrollView, and it got collapsed with the buttons pushed up above the keyboard no matter what value of android:windowSoftInputMode I was setting.

I was able to avoid my bottom row of buttons getting pushed up by the soft keyboard by setting android:isScrollContainer="false" on the ScrollView that sits above the buttons.

Solution 4 - Android

You can try to add this attribute dynamically, by putting the following code in the onCreate method of your activity:

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

This worked for me, but that:

android:windowSoftInputMode="adjustPan"

didnt.

Solution 5 - Android

These answers here didn't help me. So I tried this:

android:windowSoftInputMode="adjustResize"

This worked like a charm, Now the header of my app doesn't disappear. Its smoother.

Solution 6 - Android

To do this programatically in a fragment you can use following code

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

Place this in onResume()

Solution 7 - Android

This one worked for me

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

Solution 8 - Android

Just a single line to be added...

Add android:windowSoftInputMode="stateHidden|adjustPan" in required activity of your manifest file.

I just got solved :) :)

Solution 9 - Android

For future readers.

I wanted specific control over this issue, so this is what I did:

From a fragment or activity, hide your other views (that aren't needed while the keyboard is up), then restore them to solve this problem:

            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);
                        
                    }
                }
            });

Solution 10 - Android

So far the answers didn't help me as I have a button and a textInput field (side by side) below the textView which kept getting hidden by the keyboard, but this has solved my issue:

android:windowSoftInputMode="adjustResize"

Solution 11 - Android

For xamarin users add this code to Activity attribute of the MainActivity class,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

or you can add this code Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing) to the OnCreate method of MainActivity class.

Solution 12 - Android

This was the best which worked for me

android:windowSoftInputMode="adjustNothing"

Try it!

Solution 13 - Android

Add following code to the 'activity' of Manifest file.

android:windowSoftInputMode="adjustResize"

Solution 14 - Android

android:windowSoftInputMode="stateHidden|adjustNothing"

This code works.

Solution 15 - Android

Well i have watched these answers but in my case i fell into the same issue and got refuge through a very handy and easiest solution that involves putting a very small innocent attribute in your Scrollview tag residing in your xml file. That is

android:isScrollContainer="false"

Good luck!

Solution 16 - Android

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

This one is working for me.

Solution 17 - Android

For Scroll View:

if after adding android:windowSoftInputMode="stateHidden|adjustPan" in your Android Manifest and still does not work.

It may be affected because when the keyboard appears, it will be into a scroll view and if your button/any objects is not in your scroll view then the objects will follow the keyboard and move its position.

Check out your xml where your button is and make sure it is under your scroll View bracket and not out of it.

Hope this helps out. :D

Solution 18 - Android

Try to use this:

android:windowSoftInputMode="stateHidden|adjustPan"

Solution 19 - Android

In my case I needed the keyboard to stay hidden and just after the click of the button my layout needs to be adjusted, so I just added this command in the manifest and it got super right.

android:windowSoftInputMode="stateHidden|adjustResize"

Solution 20 - Android

When you want to hide view when open keyboard.

Add this into your Activity in manifest file

android:windowSoftInputMode="stateHidden|adjustPan"

Solution 21 - Android

None of them worked for me, try this one

 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) {

            }
        }
    });

}

Solution 22 - Android

I have solved my issue by adding

 android:windowSoftInputMode="adjustNothing" 

In manifest file add.

and making the Recyclerviews constraint isScrollContainer to false .

android:isScrollContainer="false"

Solution 23 - Android

I was struggling for a while with this problem. Some of the solutions worked however some of my views where still being pushed up while others weren't... So it didn't completely solve my problem. In the end, what did the job was adding the following line of code to my manifest in the activity tag...

android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"

Good luck

Solution 24 - Android

The activity's main window will not resize to make room for the soft keyboard. Rather, the contents of the window will be automatically panned so that the current focus is never obscured by the keyboard and users can always see what they are typing.

android:windowSoftInputMode="adjustPan"

This might be a better solution for what you desired.

Solution 25 - Android

This code may help you. Use it in your oncreate method.

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

Solution 26 - Android

Include in your manifest file under activity which you want to display .But make sure not using Full screen Activity

android:windowSoftInputMode="adjustPan"

Solution 27 - Android

@manifest in your activity:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

Solution 28 - Android

There are two ways of solving this problem. Go to the AndroidManifist.xml, and in the name of your activity, add this line

   android:windowSoftInputMode="adjustPan"

As in the below code, I have added to the Register Activity.

 <activity android:name=".Register"
            android:windowSoftInputMode="adjustPan">

In the second way, go to your activity, and in your onCreate method, add this code.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChristopher PerryView Question on Stackoverflow
Solution 1 - AndroidAlexander OleynikovView Answer on Stackoverflow
Solution 2 - AndroidDaniel DouglasView Answer on Stackoverflow
Solution 3 - AndroidArtem RussakovskiiView Answer on Stackoverflow
Solution 4 - AndroidDomView Answer on Stackoverflow
Solution 5 - AndroidamalBitView Answer on Stackoverflow
Solution 6 - AndroidChaturaMView Answer on Stackoverflow
Solution 7 - AndroidSuresh PattuView Answer on Stackoverflow
Solution 8 - AndroidSravaniView Answer on Stackoverflow
Solution 9 - AndroidPetroView Answer on Stackoverflow
Solution 10 - AndroidMichael McDowellView Answer on Stackoverflow
Solution 11 - AndroidTushar patelView Answer on Stackoverflow
Solution 12 - Androidrajlaxmi_jagdaleView Answer on Stackoverflow
Solution 13 - AndroidJose KurianView Answer on Stackoverflow
Solution 14 - AndroidamyShamnaView Answer on Stackoverflow
Solution 15 - AndroidAli NawazView Answer on Stackoverflow
Solution 16 - AndroidZhang SlardarView Answer on Stackoverflow
Solution 17 - AndroidYilsView Answer on Stackoverflow
Solution 18 - AndroidAshish GautamView Answer on Stackoverflow
Solution 19 - AndroidRafael RodriguesView Answer on Stackoverflow
Solution 20 - AndroidHakim KhanView Answer on Stackoverflow
Solution 21 - AndroidSaljith KjView Answer on Stackoverflow
Solution 22 - AndroidMILLION GASHAWView Answer on Stackoverflow
Solution 23 - AndroidJohan FickView Answer on Stackoverflow
Solution 24 - Androiduser3243900View Answer on Stackoverflow
Solution 25 - AndroidShiv prakash YadavView Answer on Stackoverflow
Solution 26 - Androiduser3419461View Answer on Stackoverflow
Solution 27 - AndroidJuan MendezView Answer on Stackoverflow
Solution 28 - AndroidRamzanView Answer on Stackoverflow