코틀린 프로젝트로 안드로이드에서 BottomSheetDialog를 쉽게 사용해보기

오늘은 코틀린 안드로이드 프로젝트에서 BottomSheetDialog를 쉽게 사용해보려 합니다.

주로 하단에서 모달을 올릴 때에 사용하는 방법입니다.

라이브러리 추가

    implementation 'com.google.android.material:material:1.0.0'

androidx 패키지 기준으로 디자인 라이브러리인 material 라이브러리를 의존성에 추가해줍니다.

레이아웃

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/chatBox"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.9">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/chatEditText"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:inputType="textPersonName"
            android:singleLine="true"
            android:fontFamily="@font/nanum_gothic_regular"/>
    </com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

하단에서 나타날 레이아웃을 준비해줍니다.

예제는 material 디자인의 텍스트 입력창만 추가한 모습입니다.

클래스

class InformationFragment: BottomSheetDialogFragment(){
    override fun setupDialog(dialog: Dialog?, style: Int) {
        super.setupDialog(dialog, style)
        val contentView = View.inflate(context, R.layout.fragment_infomation, null)
        dialog?.setContentView(contentView)
    }
}

클래스 파일을 만들어서 BottomSheetDialogFragment를 상속받습니다.

이제 해당 BottomSheetDialog를 호출할 엑티비티 혹은 프래그먼트에서 아래와 같이 작성합니다.

val bottomSheetDialogFragment = InformationFragment()
bottomSheetDialogFragment.show(supportFragmentManager, bottomSheetDialogFragment.tag)
val bottomSheetDialogFragment = InformationFragment()
bottomSheetDialogFragment.show(activity?.supportFragmentManager, bottomSheetDialogFragment.tag)

만약 프래그먼트라면 위와 같이 엑티비티를 불러와서 supportFragmentManager를 가져옵니다.

이제 앱을 실행시켜서 원하는 부분에서 BottomSheetDialog를 호출해보면 됩니다.

이벤트 리스너

val button = contentView.findViewById(R.id.sendButton) as Button
button.setOnClickListener {
    this.dismiss()
}

추가로 적어보자면, BottomSheetDialogFragment를 상속받은 클래스의 뷰에서 id를 찾아 버튼이나 입력 바 등에 사용되는 이벤트 리스너를 만들 수 있습니다.

Written on October 7, 2018