J'ai une activité qui a un RecyclerView
(éventuellement dans un CardView
) et un FloatingActionButton
Je veux que le FAB soit toujours à l'écran en bas à droite, mais lorsque je fais défiler jusqu'à la fin du RecyclerView
, le FAB cache une partie du contenu du dernier élément.
En utilisant Android:layout_marginBottom="48dp"
sur le parent CardView
(ou le RecyclerView
lui-même après avoir supprimé les CardView
) corrige ce problème, mais il provoque le RecyclerView
à se réduire à l'écran taille moins le 48dp
marge.
Je veux que le RecyclerView
soit en taille réelle (c'est-à-dire qu'il s'adapte à tous les articles), mais lorsque je fais défiler les articles jusqu'à ce que j'atteigne le dernier article, il devrait y avoir cette marge afin que le FAB ne couvre pas le dernier article de RecyclerView
. Cela est similaire au comportement de la liste de diffusion dans l'application Google Inbox/Gmail.
J'ai vu de nombreuses questions avec un problème similaire (mais pas le même), mais aucune des solutions n'a fonctionné pour moi. Je sais qu'il devrait y avoir une solution facile à ce problème, et je ne veux pas étendre LinearLayoutManager
, car cela semble trop pour ce problème. Je ne veux pas non plus masquer le FAB sur le défilement.
Voici ce que j'ai jusqu'à présent:
activity_main.xml
<Android.support.design.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:background="@color/colorBackground"
Android:fitsSystemWindows="true"
tools:context=".MainActivity">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</Android.support.design.widget.AppBarLayout>
<include layout="@layout/card_list"/>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab_add"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
Android:onClick="onClick"
app:srcCompat="@drawable/ic_add"/>
</Android.support.design.widget.CoordinatorLayout>
card_list.xml
<Android.support.v7.widget.CardView
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:layout_marginTop="@dimen/activity_vertical_margin"
Android:background="@Android:color/white"
Android:layout_marginBottom="48dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/list"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
</Android.support.v7.widget.CardView>
Supprimez le layout_marginBottom du CardView et ajoutez ce qui suit au RecyclerView:
Android:paddingBottom="48dp"
Android:clipToPadding="false"