오늘 다뤄볼것은 CustomDialog를 다뤄볼 예정이다.
일단 XML 디자인을 한뒤, DataBinding을 적용한다.
일단 CustomDialog를 만들기 위해선, Context가 필요하다.
class CustomProgress(context: Context) {
이제 Dialog 변수를 만들고 binding 변수를 적는다.
private val dlg = Dialog(context)
val binding: LayoutProgressBinding by lazy {
DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.layout_progress, null, false)
}
start()라는 변수를 통해, dialog를 띄운다.
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE) //타이틀바 제거
dlg.setCancelable(false) //바깥레이아웃을 터치해도 막는다.
dlg.setContentView(binding.root)
//선택사항 -> 크기가 너무 작거나 키울경우 사이즈를 조정할수 있다.
val params = dlg.window?.attributes //customdialog의 속성을 가져온다.
params?.width = WindowManager.LayoutParams.MATCH_PARENT
params?.height = WindowManager.LayoutParams.WRAP_CONTENT
dlg.window?.attributes = params
이제 다이어로그의 내용을 binding으로 가져온다.
with(binding) {
if (!isNeedCancel) dialogCancel.visibility = View.GONE
dialogTitle.text = title
dialogContent.text = content
dialogOk.setOnClickListener {
listener.onOKClicked("확인을 눌렀습니다")
dlg.dismiss()
}
dialogCancel.setOnClickListener {
dlg.dismiss()
}
}
dlg.show()
그렇다면 OK라던지 Cancel같은 버튼은 어떻게 제어할수있을까?
//인터페이스를 만든다.
interface DialogClickedListener {
fun onOKClicked(content: String)
}
//Listener메소드이다.
fun setOnOKClickedListener(listener: (String) -> Unit) {
this.listener = object : MyDialogOKClickedListener {
override fun onOKClicked(content: String) {
listener(content)
}
}
}
이제 실제로 적용을 해보자!
val dlg = CustomDialog(this)
dlg.setOnOKClickedListener {
//Ok를 클릭했을때
}
dlg.start(...)
이렇게 만들면 CustomDialog를 편하게 만들수 있다.