web-dev-qa-db-fra.com

RecyclerView avec FloatingActionButton

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>
11
A.A.

Supprimez le layout_marginBottom du CardView et ajoutez ce qui suit au RecyclerView:

Android:paddingBottom="48dp"
Android:clipToPadding="false"
17
mVck