How to tie a BottomSheet at the bottom view of the layout

梦想的初衷 提交于 2020-01-03 19:22:15

问题


Through ConstraintLayout, I am using a BottomSheet to show content of a map detail. My idea is the same used in GoogleMaps, but without the image carousel at the top.

I need to find some property to tie the BottomSheet in the bottom, using only the size from its layout, not the whole window, as below:

Here is my XML from parent view:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:mapbox="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.mapbox.mapboxsdk.maps.MapView
        android:id="@+id/mapview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        mapbox:center_latitude="0"
        mapbox:center_longitude="0"
        mapbox:style_url="@string/style_mapbox_streets"
        mapbox:zoom="12" />

    <!--
    <ImageView
        android:id="@+id/bottom_sheet_backdrop"
        android:layout_width="match_parent"
        android:layout_height="@dimen/anchor_point"
        android:fitsSystemWindows="true"
        app:layout_behavior="@string/BackDropBottomSheetBehavior" />
    -->

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:orientation="vertical"
        app:anchorPoint="@dimen/anchor_point"
        app:behavior_hideable="true"
        app:behavior_peekHeight="@dimen/bottom_sheet_peek_height"
        app:layout_behavior="@string/BottomSheetBehaviorGoogleMapsLike">

        <include
            layout="@layout/places_bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true" />
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/places_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:clickable="true"
        android:src="@drawable/ic_directions"
        app:elevation="3dp"
        app:layout_anchor="@id/bottom_sheet"
        app:layout_anchorGravity="top|right|end"
        app:layout_behavior="@string/ScrollAwareFABBehavior" />

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

Here is the design from BottomSheet "layout/places_bottom_sheet"

<android.support.constraint.ConstraintLayout 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="@android:color/white"
    android:orientation="vertical"
    android:paddingBottom="16dp">

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:orientation="horizontal"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/bottom_sheet_place_icon"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="8dp"
            android:src="@drawable/watchmen" />

        <TextView
            android:id="@+id/bottom_sheet_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:text="Bottom Sheet Title"
            android:textSize="20sp" />

    </LinearLayout>

    <!-- line separator -->
    <include
        android:id="@+id/include2"
        layout="@layout/line_separator"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="0dp"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />

    <!-- street address-->
    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="0dp"
        android:orientation="horizontal"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/include2">

        <ImageView
            android:id="@+id/bottom_sheet_address_icon"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_marginStart="8dp"
            android:scaleType="center"
            android:src="@drawable/ic_location_on_black_24dp" />

        <TextView
            android:id="@+id/bottom_sheet_address_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:text="Rua tal, Nº 1234"
            android:textSize="14sp" />

    </LinearLayout>

    <!-- phone -->
    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:orientation="horizontal"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout">

        <ImageView
            android:id="@+id/bottom_sheet_phone_icon"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:layout_marginStart="8dp"
            android:scaleType="center"
            android:src="@drawable/ic_phone_black_24dp" />

        <TextView
            android:id="@+id/bottom_sheet_phone_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:text="(62) 983 234 544"
            android:textSize="14sp" />

    </LinearLayout>


</android.support.constraint.ConstraintLayout>

回答1:


BottomSheet works only inside Coordinator Layout or as BottomSheetDialogFragment popup.

Because: app:layout_behavior is part of Coordinator Layout

It seems like at the moment there is no way of putting BottomSheet inside ConstraintsLayout, which would be awesome. They both extend view group so maybe one day, we will see capabilities of Coordinator Layout inside ConstraintsLayout or some mix of two.




回答2:


In places_bottom_sheet.xml, change the layout_height of the root ConstraintLayout to "match_parent".




回答3:


Add this to the This will work like a charm!!!

android:layout_gravity="center_horizontal"



回答4:


Set the gravity of the layout to bottom.



来源:https://stackoverflow.com/questions/43325570/how-to-tie-a-bottomsheet-at-the-bottom-view-of-the-layout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!