Nestedscrollview [2027]

<TextView ... /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:nestedScrollingEnabled="true" /> <!-- Note this -->

By attaching the appbar_scrolling_view_behavior to the NestedScrollView , the scroll events automatically trigger the AppBarLayout to expand or collapse. If you are using Jetpack Compose, the equivalent is Modifier.nestedScroll . The same principles apply: nestedscrollview

recyclerView.isNestedScrollingEnabled = true If you set it to false , RecyclerView will handle its own scrolling independently, breaking the coordinated behavior. Here lies the most frequent mistake developers make: Putting a RecyclerView inside a NestedScrollView and setting its height to wrap_content . &lt;TextView

<androidx.coordinatorlayout.widget.CoordinatorLayout> <com.google.android.material.appbar.AppBarLayout> <com.google.android.material.appbar.CollapsingToolbarLayout app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView ... /> <androidx.appcompat.widget.Toolbar ... /> </com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.AppBarLayout> The same principles apply: recyclerView

Box(modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())) // LazyColumn inside a vertical scroll

</LinearLayout> </androidx.core.widget.NestedScrollView> For the magic to work, the inner scrollable view (e.g., RecyclerView ) must have nested scrolling enabled. In modern AndroidX versions, this is true by default, but you can explicitly set it:

<androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical">