Set FAB (Floating Action Button) above keyboard Set FAB (Floating Action Button) above keyboard android android

Set FAB (Floating Action Button) above keyboard


Turns out it's pretty easy,

  • Add android:windowSoftInputMode="adjustResize" to your activity in manifest
  • Make sure your root view in layout xml, has android:fitsSystemWindows="true" property


If you want to see FloatingActionBar move above keyboard, you should:

1) Insert FloatingActionBar inside CoordinatorLayout:

<androidx.coordinatorlayout.widget.CoordinatorLayout    android:id="@+id/coordinator"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.google.android.material.floatingactionbutton.FloatingActionButton        android:id="@+id/fab"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="bottom|end"        android:layout_margin="16dp"        android:src="@drawable/ic_img" /></androidx.coordinatorlayout.widget.CoordinatorLayout>

2) Add in root View (where your FAB exist) code:

android:fitsSystemWindows="true".

For example:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:fitsSystemWindows="true"    android:orientation="vertical"    tools:context=".AddFilm">    <androidx.coordinatorlayout.widget.CoordinatorLayout        android:id="@+id/coordinator"        android:layout_width="match_parent"        android:layout_height="match_parent">        <com.google.android.material.floatingactionbutton.FloatingActionButton            android:id="@+id/fab"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="bottom|end"            android:layout_margin="16dp"            android:src="@drawable/ic_img" />    </androidx.coordinatorlayout.widget.CoordinatorLayout></LinearLayout>

3) Add next code in AndroidManifest.xml to your Activity:

android:windowSoftInputMode="adjustResize"

For example:

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


If you are using in particular fragment you can use this code and for activity just alter accordingly.

    view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {        @Override        public void onGlobalLayout() {            Rect r = new Rect();            view.getWindowVisibleDisplayFrame(r);            if (v.getRootView().getHeight() - (r.bottom - r.top) > 500) {                //Log.d("keyboardStatus","opened");                fab.setVisibility(View.GONE);            } else {               // Log.d("keyboardStatus","closed");                fab.setVisibility(View.VISIBLE);            }        }    });