CutomDialog 구성

0

오늘 다뤄볼것은 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를 편하게 만들수 있다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글