J'affiche FloatingActionButton
avec une Recyclerview
dans une CoordinatorLayout
, lorsque l'utilisateur clique sur le FAB, une ligne est ajoutée dans Recyclerview
. Maintenant, le problème est que le FAB a une marge lorsque j’ai testé dans l’API 15 mais que j’ai testé dans l’API 22 (Lollipop 5.1.1-Nexus 4), je n’obtiens aucune marge et le FAB est enfoncé au bord de l’écran.
Mon problème est que FAB a une configuration de marge par défaut dans l'API 15 (je n'ai pas testé d'autres périphériques), mais pas dans l'API 22 ou il me manque quelque chose.
Mon code de mise en page:
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#6fbababa"
Android:fitsSystemWindows="true">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/my_recycler_view"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clipToPadding="false"
Android:paddingBottom="@dimen/fab_padding_bottom"
Android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#ffffff">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fitsSystemWindows="true"
Android:orientation="horizontal"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed">
---------------------
---------------------
</LinearLayout>
</Android.support.design.widget.AppBarLayout>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/button_floating_action"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:src="@drawable/ic_plus"
app:borderWidth="0dp"
app:layout_anchor="@id/my_recycler_view"
app:layout_anchorGravity="bottom|right|end"
app:rippleColor="@color/wallet_highlighted_text_holo_light" />
</Android.support.design.widget.CoordinatorLayout>
Il suffit d'utiliser:
app:useCompatPadding="true"
Cela devrait ajouter de l'espace requis.
J'ai fini par utiliser des valeurs de marge spécifiques à l'API. Mon bouton d'action est comme ça:
<Android.support.design.widget.FloatingActionButton
Android:contentDescription="@string/menu_compose"
Android:id="@+id/action"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:clickable="true"
Android:src="@drawable/ic_create_white"
Android:layout_gravity="bottom|right|end"
Android:layout_marginBottom="@dimen/action_button_margin"
Android:layout_marginRight="@dimen/action_button_margin"
Android:layout_marginEnd="@dimen/action_button_margin"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:fabSize="normal"/>
@dimen/action_button_margin
est défini dans les deux valeurs/dimens.xml:
<dimen name="action_button_margin">0dp</dimen>
Et dans values-v21/dimens.xml:
<dimen name="action_button_margin">16dp</dimen>
Je suppose que vous avez le même problème que décrit dans cette question . La marge différente est due au fait que l'ombre est calculée ou non en fonction de la version de l'API.