e_netr
e_netr

Reputation: 592

Bottom Sheet and FAB margin

How do you add margin between a bottom sheet and a Floating Action Button in android. I made it working by using another FAB and making it invisible but the FAB is only just above the Bottom Sheet. See this picture : 1

And the code :

<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:theme="@style/Theme.AppCompat.NoActionBar"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<RelativeLayout
    android:id="@+id/search_relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/Theme.AppCompat.NoActionBar">

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

<android.support.v4.widget.NestedScrollView
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="@android:color/white"
    android:elevation="1dp"
    app:behavior_hideable="true"
    app:behavior_peekHeight="0dp"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/circle_picture"
            android:src="@mipmap/login_background"
            android:layout_margin="10dp"
            android:layout_width="50dp"
            android:layout_height="50dp" />
        <TextView
            android:id="@+id/name_bottom_sheet"
            android:layout_toEndOf="@id/circle_picture"
            android:text="Title"
            android:textColor="@color/buttonLoginColor"
            android:layout_margin="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/address_bottom_sheet"
            android:layout_below="@id/name_bottom_sheet"
            android:layout_toEndOf="@id/circle_picture"
            android:layout_marginStart="10dp"
            android:textColor="@color/btn_create"
            android:text=""
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</android.support.v4.widget.NestedScrollView>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="invisible"
    android:layout_margin="15dp"
    app:layout_anchor="@id/bottom_sheet"
    app:layout_anchorGravity="top|end"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/floatingButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="50dp"
    android:layout_marginEnd="15dp"
    app:backgroundTint="@color/buttonLoginColor"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:layout_anchor="@id/fab2"
    app:layout_anchorGravity="top"/>

</android.support.design.widget.CoordinatorLayout>

I'm using a NestedScrollView to display the bottom sheet.

Upvotes: 2

Views: 2061

Answers (2)

9spl
9spl

Reputation: 357

Yes, you can try with RelativeLayout , I'm still not able to understand why you have gave bottom sheet fixed height with 300dp, anyway this will do it without another fab button..

<RelativeLayout
    android:id="@+id/coordinator"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:theme="@style/Theme.AppCompat.NoActionBar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <RelativeLayout
        android:id="@+id/search_relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:theme="@style/Theme.AppCompat.NoActionBar">

        <com.google.android.gms.maps.MapView
            android:id="@+id/mapView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </RelativeLayout>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignParentBottom="true"
        android:background="@android:color/white"
        android:elevation="1dp"
        app:behavior_hideable="true"
        app:behavior_peekHeight="0dp"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/circle_picture"
                android:src="@mipmap/login_background"
                android:layout_margin="10dp"
                android:layout_width="50dp"
                android:layout_height="50dp" />
            <TextView
                android:id="@+id/name_bottom_sheet"
                android:layout_toEndOf="@id/circle_picture"
                android:text="Title"
                android:textColor="@color/buttonLoginColor"
                android:layout_margin="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/address_bottom_sheet"
                android:layout_below="@id/name_bottom_sheet"
                android:layout_toEndOf="@id/circle_picture"
                android:layout_marginStart="10dp"
                android:textColor="@color/btn_create"
                android:text=""
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </RelativeLayout>
    </android.support.v4.widget.NestedScrollView>



    <android.support.design.widget.FloatingActionButton
        android:id="@+id/floatingButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottom_sheet"

        android:layout_margin="15dp"
        app:backgroundTint="@color/buttonLoginColor"
        app:borderWidth="0dp"
        android:layout_alignParentRight="true"
        app:elevation="6dp"
        app:layout_anchorGravity="top"/>

</RelativeLayout>

You can also set your fab button margins as per your requirement.

Upvotes: 0

GV_FiQst
GV_FiQst

Reputation: 1567

I had the same issue. After hours of researching I figured out it can't be made through layout_anchor because of Material design guidelines. You need to use trick like one below. I'm using a transparent view that makes margin between fab and bottom sheet content view.

This is how I solved the issue:

FAB itself:

<android.support.design.widget.FloatingActionButton
    ...
    app:layout_anchor="@+id/bottomPanel"
    app:layout_anchorGravity="right"/>

BottomSheet:

<FrameLayout
    android:id="@+id/bottomPanel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:backgound="@android:color/transparent"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <ContentView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginTop="44dp"
        android:backgound="@color/colorPrimary" />

</FrameLayout>

Just make the root view transparent and your content view put inside that and add margin of 44dp (fab size = 56dp. fab padding = 16dp. 56/2 + 16 = 44)

Upvotes: 0

Related Questions