728x90
블로그 이사했습니다!
👇 블로그 이전 공지 👇
👇 새 블로그에서 글 보기 👇
[Android] 하단 다이얼로그 BottomSheetDialog 구현하기 — Win Record (tistory.com)
BottomSheetDialog란?
화면 하단에 붙어있는 다이얼로그. 아래처럼 여러 방식으로 구성할 수 있다.
구현 방법
BottomSheetDialog 객체 생성해서 만들기커스텀 다이얼로그로 만들기
BottomSheetDialog를 상속해서 구현하기BottomSheetDialogFragment를 상속해서 구현하기
BottomSheetDialog 객체 생성해서 구현하기
구현 순서
다이얼로그 레이아웃 만들기뷰(activity, fragment)에서 bottomSheetDialog 생성하기
1. 다이얼로그 레이아웃 (dialog_content.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="제목" />
<View
android:layout_width="80dp"
android:layout_height="1dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="15dp"
android:background="@color/purple_700" />
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="40dp"
android:text="내용"
android:textAlignment="center" />
</LinearLayout>
2. 다이얼로그 생성 (MainActivity.kt)
val dialog: BottomSheetDialog = BottomSheetDialog(this)
dialog.setContentView(R.layout.dialog_content)
val tv = dialog.findViewById<TextView>(R.id.content)
tv?.setOnClickListener {
Toast.makeText(this, "내용을 클릭하였습니다", Toast.LENGTH_LONG).show()
dialog.dismiss()
}
dialog.show()
아래처럼 내용이란 텍스트뷰를 클릭했을 때 토스트가 나타나는 다이얼로그가 생성되었다.
커스텀 다이얼로그로 구현하기
class를 상속할지, fragment를 상속할지에 따라 BottomSheetDialog와 BottomSheetDialogFragment 중 선택해서 커스텀 다이얼로그를 구현하면 된다.
클래스를 상속하는 경우 뷰에서 생성하는 방법이 위의 방법과 동일하다.
따라서 본 글에서는 BottomSheetDialogFragment를 선택해 구현해본다.
구현 순서
다이얼로그 레이아웃 만들기커스텀 다이얼로그 구현하기뷰(activity, fragment)에서 CustomDialog 생성하기
1. 다이얼로그 레이아웃 (dialog_input.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal">
<EditText
android:id="@+id/edt_input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/white"
android:hint="아무 글자를 입력해주세요"
android:inputType="text"
android:padding="10dp">
<requestFocus />
</EditText>
<TextView
android:id="@+id/tv_done"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/purple_700"
android:gravity="center"
android:paddingHorizontal="15dp"
android:text="완료"
android:textColor="@color/white" />
</LinearLayout>
2. 커스텀 다이얼로그 구현 (CustomDialog.kt)
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
class CustomDialog(private val doneText: String, private val listener: OnClickListener) :
BottomSheetDialogFragment(),
View.OnClickListener {
lateinit var tvDone: TextView
val mTag = "커스텀 다이얼로그"
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
super.onCreateView(inflater, container, savedInstanceState)
val view: View = inflater.inflate(R.layout.dialog_input, container, false)
// 텍스트뷰 세팅
tvDone = view.findViewById<TextView>(R.id.tv_done)!!
tvDone.setOnClickListener(this)
tvDone.text = doneText
return view
}
interface OnClickListener {
fun onClick(dialog: CustomDialog)
}
override fun onClick(p0: View?) {
listener.onClick(this)
}
}
생성자로 텍스트뷰에 세팅할 문자열과 클릭 리스너를 받는다.
3. 다이얼로그 생성 (MainActivity.kt)
val customDialog = CustomDialog("입력하기", object : CustomDialog.OnClickListener {
override fun onClick(dialog: CustomDialog) {
Toast.makeText(
this@MainActivity,
dialog.tvDone.text.toString(),
Toast.LENGTH_LONG
).show()
dialog.dismiss()
}
})
customDialog.show(supportFragmentManager, customDialog.mTag)
아래와 같이 TextView를 클릭했을 때 EditText의 글자를 토스트 띄워주는 다이얼로그가 완성된다.
'android > kotlin' 카테고리의 다른 글
[Android][Kotlin] 팝업 메뉴 Popup Menu 구현하기 (0) | 2021.06.24 |
---|---|
[Android][Kotlin] 컨텍스트 메뉴 Context Menu 만들기 (0) | 2021.06.21 |
[Android][Kotlin] 뷰바인딩 ViewBinding 적용하기 (0) | 2021.06.12 |
[Android][Kotlin] 키보드 높이 이용해 키보드 올리기, 내리기 (0) | 2021.06.09 |
[Android][Kotlin] 키보드 표시하기, 숨기기 (0) | 2021.06.06 |
댓글