BottomSheetDialogFragmentの忘備録

こんにちは、m_saekiです。

久しぶりの投稿です！

Material Designになってから2年くらいかな？
BottomSheetの記事がかなり少ないので投稿しようと思います！
自分の忘備録としても投稿しているので指摘などがあればお手柔らかにお願いしますmm
[Modal Bottom Sheets](https://material.io/develop/android/components/bottom-sheet-dialog-fragment/)って何ってかたはこの辺り見てください。

## Enviroment
- Android Studio 3.5 Canary5
- kotlin ver: 1.3.21

## 実装

### app/build.gradle

dataBindingしているコードになるので気をつけてくださいmm

```
dataBinding {
    enabled = true
}
```

### fragment_bottom_sheet.xml

``` 
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:behavior_hideable="true"
            app:behavior_peekHeight="56dp">

        <LinearLayout
                android:id="@+id/shareLayout"
                android:layout_width="match_parent"
                android:layout_height="56dp"
                android:orientation="horizontal"
                android:background="?android:attr/selectableItemBackground"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent">

            <ImageView
                    android:layout_width="32dp"
                    android:layout_height="32dp"
                    android:layout_marginStart="16dp"
                    android:layout_gravity="center_vertical"
                    android:src="@drawable/ic_????"/>

            <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Share"
                    android:textColor="#000000"
                    android:layout_gravity="center_vertical"
                    android:layout_marginStart="16dp"
                    android:layout_marginEnd="16dp"/>

        </LinearLayout>

        <LinearLayout
                android:id="@+id/getLinkLayout"
                android:layout_width="match_parent"
                android:layout_height="56dp"
                android:orientation="horizontal"
                android:background="?android:attr/selectableItemBackground"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/shareLayout">

            <ImageView
                    android:layout_width="32dp"
                    android:layout_height="32dp"
                    android:layout_marginStart="16dp"
                    android:layout_gravity="center_vertical"
                    android:src="@drawable/ic_????"/>

            <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Get Link"
                    android:textColor="#000000"
                    android:layout_gravity="center_vertical"
                    android:layout_marginStart="16dp"
                    android:layout_marginEnd="16dp"/>

        </LinearLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>
```

### CustomBottomSheetFragment.kt

```
import com.google.android.material.bottomsheet.BottomSheetDialogFragment

class CustomBottomSheetDialogFragment: BottomSheetDialogFragment() {

    private lateinit var binding: FragmentBottomSheetBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bottom_sheet, container, false)
        return binding.root
    }

    companion object {
        fun newInstance(): CustomBottomSheetDialogFragment {
            val args = Bundle()
            val fragment = CustomBottomSheetDialogFragment()
            fragment.arguments = args
            return fragment
        }
    }
}
```

### MainActivity.kt

MainActivityの使用する箇所に実装する

```
val dialog = CustomBottomSheetDialogFragment.newInstance()
dialog.show(supportFragmentManager, dialog.tag)
```

思ったより簡単に実装できるので皆さんもBottomSheetFragmentに挑戦してはどうでしょうか？？