Move layouts up when soft keyboard is shown?

AndroidUser InterfaceAndroid LayoutAndroid Keypad

Android Problem Overview


I have a few elements in a RelativeView with the align bottom attribute set, when the soft keyboard comes up the elements are hidden by the soft keyboard.

I would like them to move up so that if there is enough screen space they are shown above the keyboard, or to make the section above the keyboard scrollable so the user can still see the elements.

Any ideas on how to approach this?

Android Solutions


Solution 1 - Android

Yes, check out http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html">this article on the Android developers' site which describes how the framework handles the soft keyboard appearing.

The http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft">android:windowSoftInputMode</a></code> attribute can be used to specify what happens on a per-activity basis: whether the layout is resized or whether it scrolls etc.

Solution 2 - Android

You can also use this code in onCreate() method:

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

Solution 3 - Android

Add in AndroidManifest.xml for your activity:

android:windowSoftInputMode="adjustPan|adjustResize"

Solution 4 - Android

Make changes in the activity of your Manifest file like

android:windowSoftInputMode="adjustResize"

OR

Make changes in your onCreate() method in the activity class like

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

Solution 5 - Android

similar issue i was facing with my layout which consist scroll view inside. Whenever i try to select text in EditText,Copy/Cut/Paste action bar gets moved up with below code as such it does not resize layout

android:windowSoftInputMode="adjustPan"

By modifying it to as below

  1. AndroidManifest.xml

    android:windowSoftInputMode="stateVisible|adjustResize"

  2. style.xml file ,in activity style

    true

It worked for me.

Solution 6 - Android

In AndroidManifest.xml, don't forget to set:

 android:windowSoftInputMode="adjustResize"

and for RelativeLayout inside ScrollView ,set :

 android:layout_gravity="center" or android:layout_gravity="bottom" 

it will be okay

Solution 7 - Android

for Activity in its oncreate methode insert below line

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

and for fragments in its onCreate method

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

Solution 8 - Android

There are 3 steps to follow to scroll screen up.

  1. Write in manifest file for your activity:

> android:windowSoftInputMode="adjustResize"

  1. Add following line in oncreate() method of your activity

>getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

  1. Then place your whole view in "Scrollview" in XML file like :

> > http://schemas.android.com/apk/res/android" > android:layout_width="fill_parent" > android:background="@drawable/bg" > android:layout_height="match_parent" > > > android:layout_width="fill_parent" > android:layout_height="match_parent" > android:layout_gravity="center" > > > ......... > > > > >

Solution 9 - Android

<activity name="ActivityName"
    android:windowSoftInputMode="adjustResize">
    ...
</activity>

Add NestedScrollView around layout which you want to scroll, this will perfectly work

Solution 10 - Android

I tried a method of Diego Ramírez, it works. In AndroidManifest:

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

In activity_main.xml:

<LinearLayout ...
    android:orientation="vertical">

<Space
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

<EditText
    android:id="@+id/edName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/first_name"
    android:inputType="textPersonName" />

<EditText ...>
...
</LinearLayout>

Solution 11 - Android

I have found a solution to my problems that it's pretty same as yours.

First of all, I only have a LinearLayout with 2 elements, an ImageView and a LinearLayout wich contains 2 EditText and one Button, so I needed to keep them separate in full screen without keyboard, and when the keyboard appears they should look closer.

So I added the view between them with the height attribute in 0dp and weight 1, that let me keep my views separate one form each other. and when the keyboard appers, as they don't have a fix height, they just resize and keep the aspect.

Voila! The layout resize and the distance between my views is the same when the keyboard is or not present.

Solution 12 - Android

I just added the following line to the top level layout and everything worked:

android:fitsSystemWindows="true"

Solution 13 - Android

  1. If user want this task using manifest then add this line in manifest
  2. In manifest add this line: - android:windowSoftInputMode="adjustPan" e.g.

In Java File or Kotlin File (Programmatically):- If the user wants this using Activity then add the below line in onCreate Method

activity?.window()?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)

Solution 14 - Android

Here is full manifest code

<activity
        android:name=".activities.MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Solution 15 - Android

In your manifest file add the below line. It will work

<activity name="MainActivity"
    android:windowSoftInputMode="stateVisible|adjustResize">
    ...
</activity>

Solution 16 - Android

if you are in fragments then you have to add the below code to your onCreate on your activity it solves issue for me

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

Solution 17 - Android

This is what worked for me after looking at a lot of solutions:

In AndroidManifest.xml add the following line to an activity declaration in the manifest file of your project.

android:windowSoftInputMode="stateHidden|adjustPan" 

The code should look something like this:

    <activity
        android:name=".MainActivity"
        android:screenOrientation="landscape"
        android:windowSoftInputMode="stateHidden|adjustPan">
    </activity>

Solution 18 - Android

Alright this is very late however I've discovered that if you add a List View under your edit text then the keyboard will move all layouts under that edittext without moving the ListView

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

This is the only solution that worked for me.

Solution 19 - Android

Not a single advice solve my issue. Adjust Pan is almost as like work Adjust Resize. If i set Adjust Nothing than layout not move up but it hide my edittext of bottom that i am corrently writing. So after 24 hour of continuous searching I found this source and it solve my problem.

Solution 20 - Android

It might be late but I want to add few things. In Android Studio Version 4.0.1, and Gradle Version 6.1.1, the windowSoftInputMode will not work as expected if you are adding the following flags in your Activity :

getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        );

After wasting lot of time, I have found that hack. In order for adjustResize or AdjustPanor any attribute of windowSoftInputMode to work properly, you need to remove that from your activity.

Solution 21 - Android

Use Scroll View as a Parent and use this Tag in Scroll View

android:fillViewport="true"

Solution 22 - Android

Add this line to the view:

view.requestFocus();

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
QuestionDinedalView Question on Stackoverflow
Solution 1 - AndroidChristopher OrrView Answer on Stackoverflow
Solution 2 - AndroidBobsView Answer on Stackoverflow
Solution 3 - AndroidSerhii BohutskyiView Answer on Stackoverflow
Solution 4 - AndroidJose KurianView Answer on Stackoverflow
Solution 5 - AndroidRonak PoriyaView Answer on Stackoverflow
Solution 6 - AndroidZahra.HYView Answer on Stackoverflow
Solution 7 - AndroidRahul_PawarView Answer on Stackoverflow
Solution 8 - AndroidHeena AroraView Answer on Stackoverflow
Solution 9 - AndroidPrakash ReddyView Answer on Stackoverflow
Solution 10 - AndroidCoolMindView Answer on Stackoverflow
Solution 11 - AndroidDiego Ramírez VásquezView Answer on Stackoverflow
Solution 12 - AndroidDarushView Answer on Stackoverflow
Solution 13 - Androidsafal bhatiaView Answer on Stackoverflow
Solution 14 - AndroidDantalianView Answer on Stackoverflow
Solution 15 - AndroidShivam GargView Answer on Stackoverflow
Solution 16 - AndroidPratik Mohanrao GondilView Answer on Stackoverflow
Solution 17 - AndroidMartin VichevView Answer on Stackoverflow
Solution 18 - AndroidOmar BoshraView Answer on Stackoverflow
Solution 19 - AndroidMahbubur Rahman KhanView Answer on Stackoverflow
Solution 20 - AndroidSharryyView Answer on Stackoverflow
Solution 21 - AndroidTippu Fisal SheriffView Answer on Stackoverflow
Solution 22 - AndroidOthman AlMsaeedView Answer on Stackoverflow