Android: How to push button above soft keyboard

JavaAndroidXmlAndroid LayoutAndroid Softkeyboard

Java Problem Overview


I've got a "save" button which I want to push up together with the soft keyboard. So when the user clicks an EditText in my layout, then the button has to stay above the keyboard. Now the button becomes hidden underneath the keyboard. How do you do this?

Thanks in advance!

Java Solutions


Solution 1 - Java

You need to set your keyboard's input mode to adjustResize. You can do this adding the following line to your activity's attributes in the manifest:

    android:windowSoftInputMode="adjustResize"

Here's an example of the attribute added in the activity:

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

Solution 2 - Java

Along with Inthathep's answer, you have to add an attribute in the parent viewgroup

android:fitsSystemWindows="true"

to work it as desired. i.e, in manifest file , for the activity add

android:windowSoftInputMode="adjustResize"

and eg.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:fitsSystemWindows="true" <!-- add this -->
    android:orientation="vertical"
    >
    <EditText
        android:id="@+id/et_assetview_comment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:minHeight="80dp"
        android:background="@color/white"
        android:hint="Enter comments"
        />
    <Button
        android:id="@+id/btn_assetview_postcomment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="POST"
        />
</LinearLayout>

Solution 3 - Java

Order your layout like this and you will able to put button to above keyboard

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/button_next"
        android:background="#0ff"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="250dp"
                android:hint="Hint"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ABC"
                android:textSize="50sp"
                />
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/button_next"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:layout_margin="10dp"
        android:text="Button Next"
        />

</RelativeLayout>

In android manifest

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

enter image description here

Note that, instead of RelativeLayout, you can also use another ViewGroup like LinearLayout with weight, CordinatorLayout, ...

Solution 4 - Java

So this is a pretty old post, but I struggled with the answers provided. Both oneavi and Intahep are correct, but let me show you EXACTLY where the android:windowSoftInputMode="adjustResize" goes.

in Android Manifest

    <activity android:name=".DataScreen" />
    <activity android:name=".PauseScreen" />
    <activity android:name=".RouteInfo"
               android:windowSoftInputMode="adjustResize"> <!--This goes in the specific activity with the button -->
    </activity>

Solution 5 - Java

The best way is to hide the keystroke and, if necessary, press the buttons above the keyboard

 android:windowSoftInputMode="adjustResize|stateHidden"

Solution 6 - Java

Additional point Any of the above including "adjustResize" will work except if your activity is full screen. That was my case. check your activity code to ensure its not in full screen.

Solution 7 - Java

This simple setup scrolls the entire layout up with the keyboard.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <ImageView
            android:id="@+id/image_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@id/recycler_view"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/image" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/button"
            android:layout_centerHorizontal="true" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Button" />

</RelativeLayout>

Key points:

  • Nothing added to the manifest.

  • Image must be "wrap_content" (not fixed size) to allow android to resize it as needed.

  • All views must be linked as shown above. The bottom view layout_alignParentBottom="true", the top view layout_alignParentTop="true", and all intermediate views layout_above="@id/view_below".

  • The layout_below="@id/view_above" attribute does not work for some reason.

Solution 8 - Java

In AndroidX:

Use CoordinatorLayout for main parent layout and add a NestedScrollView for your content and add your layout or button in child of CoordinatorLayout to push button above soft keyboard

<androidx.coordinatorlayout.widget.CoordinatorLayout  
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:isScrollContainer="true"  >
        .......
    </androidx.core.widget.NestedScrollView>
    <com.google.android.material.button.MaterialButton
        android:id="@+id/send_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:text="@string/login" />

photo:

https://snipboard.io/n45tbx.jpg

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
QuestionXanderView Question on Stackoverflow
Solution 1 - JavaIntathepView Answer on Stackoverflow
Solution 2 - JavaoneaviView Answer on Stackoverflow
Solution 3 - JavaLinhView Answer on Stackoverflow
Solution 4 - JavaNathan O'KaneView Answer on Stackoverflow
Solution 5 - Javaiman hoshmandView Answer on Stackoverflow
Solution 6 - JavaThe Billionaire GuyView Answer on Stackoverflow
Solution 7 - JavaJeffreyView Answer on Stackoverflow
Solution 8 - JavaShahab SaalamiView Answer on Stackoverflow