Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: CoordinatorLayout and SwipeRefreshLayout

I try to implement auto hiding toolbar feature from the new support library 22.2.0. Without SwipeRefreshLayout is working fine:

enter image description here

But when I re add this layout, toolbar overlap the recyclerview:

enter image description here

Code:

<android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:fitsSystemWindows="true">      <android.support.design.widget.CoordinatorLayout         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:app="http://schemas.android.com/apk/res-auto"         xmlns:fab="http://schemas.android.com/apk/res-auto"         android:layout_width="match_parent"         android:layout_height="match_parent">          <android.support.design.widget.AppBarLayout             android:layout_width="match_parent"             android:layout_height="wrap_content">              <android.support.v7.widget.Toolbar                 xmlns:android="http://schemas.android.com/apk/res/android"                 xmlns:app="http://schemas.android.com/apk/res-auto"                 android:id="@+id/toolbar"                 android:layout_width="match_parent"                 android:layout_height="?attr/actionBarSize"                 android:background="?attr/colorPrimary"                 android:theme="@style/ThemeOverlay.ActionBar"                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"                 app:layout_scrollFlags="scroll|enterAlways"/>          </android.support.design.widget.AppBarLayout>          <android.support.v4.widget.SwipeRefreshLayout             xmlns:android="http://schemas.android.com/apk/res/android"             android:id="@+id/swipe_container"             android:layout_width="match_parent"             android:layout_height="match_parent">              <android.support.v7.widget.RecyclerView                 android:id="@+id/cardList"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:scrollbars="vertical"                 app:layout_behavior="@string/appbar_scrolling_view_behavior"/>          </android.support.v4.widget.SwipeRefreshLayout>     </android.support.design.widget.CoordinatorLayout> </android.support.v4.widget.DrawerLayout> 

UPDATE 2020 with Androidx:

Code:

    <androidx.drawerlayout.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:fitsSystemWindows="true">      <androidx.coordinatorlayout.widget.CoordinatorLayout         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:app="http://schemas.android.com/apk/res-auto"         xmlns:fab="http://schemas.android.com/apk/res-auto"         android:layout_width="match_parent"         android:layout_height="match_parent">          <com.google.android.material.appbar.AppBarLayout             android:layout_width="match_parent"             android:layout_height="wrap_content">              <androidx.appcompat.widget.Toolbar                 xmlns:android="http://schemas.android.com/apk/res/android"                 xmlns:app="http://schemas.android.com/apk/res-auto"                 android:id="@+id/toolbar"                 android:layout_width="match_parent"                 android:layout_height="?attr/actionBarSize"                 android:background="?attr/colorPrimary"                 android:theme="@style/ThemeOverlay.ActionBar"                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light"                 app:layout_scrollFlags="scroll|enterAlways"/>          </com.google.android.material.appbar.AppBarLayout>          <androidx.swiperefreshlayout.widget.SwipeRefreshLayout             xmlns:android="http://schemas.android.com/apk/res/android"             android:id="@+id/swipe_container"             android:layout_width="match_parent"             android:layout_height="match_parent">              <androidx.recyclerview.widget.RecyclerView                 android:id="@+id/cardList"                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 android:scrollbars="vertical"                 app:layout_behavior="@string/appbar_scrolling_view_behavior"/>          </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>     </androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.drawerlayout.widget.DrawerLayout> 

Any idea how to fix this?

like image 877
Tomas Avatar asked Jun 03 '15 15:06

Tomas


People also ask

What is Android CoordinatorLayout?

CoordinatorLayout is a super-powered FrameLayout . CoordinatorLayout is intended for two primary use cases: As a top-level application decor or chrome layout. As a container for a specific interaction with one or more child views.

How do I use CoordinatorLayout?

Layout-Based: Layout-Based behaviors are used to shift one view to some other place when you perform a certain operation. For example, whenever you click on a Floating Action Button(FAB), then that FAB will be moved up and one Snackbar will come from the bottom of the screen.


1 Answers

Set the scroll behavior to the SwipeRefreshLayout not the RecyclerView.

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout     android:id="@+id/swipe_container"     android:layout_width="match_parent"     android:layout_height="match_parent"     app:layout_behavior="@string/appbar_scrolling_view_behavior">      <androidx.recyclerview.widget.RecyclerView         android:id="@+id/cardList"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:scrollbars="vertical" />  </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> 
like image 170
Lamorak Avatar answered Sep 29 '22 09:09

Lamorak