Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of CollapsingToolbarLayout causes RecyclerView’s bottom to be underscreen without wasting too much if your time.
The question is published on by Tutorial Guruji team.
The question is published on by Tutorial Guruji team.
I have AppBarLayout with fixed height (@dimen/app_bar_height = 200dp), which has CollapsingToolbarLayout in it. When scrolling down, part of recyclerview is hidden under screen bottom.
If I remove scroll flags (ie. disable scrolling collapse) I remove app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
from CollapsingToolbarLayout then it is normally aligning screen bottom.
<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout 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" tools:ignore="MergeRootFrame"> <com.google.android.material.appbar.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="@dimen/app_bar_height" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <!-- Problem HERE in app:layout_scrollFlags --> <com.google.android.material.appbar.CollapsingToolbarLayout android:id="@+id/toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:expandedTitleGravity="bottom" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" app:toolbarId="@+id/toolbar"> <TextView android:text="Hello, Hello, Hello, Hello, Hello, Hello, Hello, Hello, Hello, Hello" android:textSize="19sp" android:textStyle="bold" android:id="@+id/txtDescr" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.5"/> <androidx.appcompat.widget.Toolbar android:id="@+id/detail_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|start" android:layout_margin="@dimen/fab_margin" app:layout_collapseMode="pin" app:srcCompat="@android:drawable/stat_notify_chat" /> </com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.AppBarLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:scrollbars="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:scrollbarThumbVertical="@android:color/darker_gray" android:scrollbarSize="7dp" android:layout_height="match_parent" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> </androidx.coordinatorlayout.widget.CoordinatorLayout>
Answer
I ended up using the followiing, to detect last item scroll and notifyDataSetChanged(), that solves the issue :
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { private boolean hasFixedLastItemNotVisible = false; @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (!hasFixedLastItemNotVisible && !recyclerView.canScrollVertically(10) && newState==RecyclerView.SCROLL_STATE_IDLE) { hasFixedLastItemNotVisible = true; recyclerView.getAdapter().notifyDataSetChanged(); } } });
We are here to answer your question about CollapsingToolbarLayout causes RecyclerView’s bottom to be underscreen - If you find the proper solution, please don't forgot to share this with your team members.