버튼은 총 3개까지 띄울 수 있음
AlterDialog.Builder(context:Context!)
open fun setIcon(iconId:Int) : AlterDialog.Builder!
open fun setTitle(title:CharSequence!)" AlterDiaglog.Builder!
open fun setMessage(message:CharSequence!):AlterDialog.Builder!
open fun setPostiveButton(text:CharSequence, listener:DialogInterface.OnClickListener!):AlterDialog.Builder!
open fun setNegativeButton(text:CharSequence, listener:DialogInterface.OnClickListener!):AlterDialog.Builder!
open fun setNeutralButton(text:CharSequence, listener:DialogInterface.OnClickListener!):AlterDialog.Builder!
각 함수의 첫번째 매개변수는 버튼의 문자열이며 두 번째 매겨변수는 사용자가 버튼을 클릭했을 때 처리할 이벤트 헨들러
만약 버튼을 클릭했을때 처리할 내용이 없다면 두 번째 매개변수에 null을 대입한다. null을 대입해도 버튼을 클릭하면 창이 닫힌다.
-> 같은 함수를 여러번 사용하면 가장 마지막의 코드가 실행된다.
각 이벤트에 해당하는 이벹느 핸들러를 따로 만들 수도 있지만, 한 알림 창의 버튼 이벤트를 하나의 이벤트 핸들러에서 모두 처리할 수 있지만, 어떤 버튼일 클릭되었는지 구분해야한다. 그래서 셋 중 어떤 함수를 사용했는지에 따라 이벤트 핸들러에 전달되는 매개변숫값이 달라서 그 값으로 구분한다.
fun dialog(){
// 다이얼로그 생성을 위한 객체를 생성한다.
val builder = AlertDialog.Builder(this@MainActivity)
// 타이틀
builder.setTitle("기본 다이얼로그")
// 메시지
builder.setMessage("기본 다이얼로그 입니다.")
// 아이콘
builder.setIcon(R.mipmap.ic_launcher)
// 버튼은 총 3개까지 띄울 수 있음
// 긍정버튼
builder.setPositiveButton("확인"){ dialogInterface: DialogInterface, i: Int ->
setTextView.text = "확인 버튼을 눌렀습니다."
}
// 부정 버튼
builder.setNegativeButton("취소"){ dialogInterface: DialogInterface, i: Int ->
setTextView.text = "취소 버튼을 눌렀습니다."
}
// 중립 버튼
builder.setNeutralButton("중립"){ dialogInterface: DialogInterface, i: Int ->
setTextView.text = "중립 버튼을 눌렀습니다."
}
builder.show()
}
fun eventDialog(){
val builder = AlertDialog.Builder(this@MainActivity)
val eventHandler = object:DialogInterface.OnClickListener{
override fun onClick(dialog: DialogInterface?, which: Int) {
when(which){
DialogInterface.BUTTON_POSITIVE ->{
setTextView.text = "이벤트 핸들러 확인"
}
DialogInterface.BUTTON_NEGATIVE->{
setTextView.text = "이벤트 핸들러 취소"
}
DialogInterface.BUTTON_NEUTRAL->{
setTextView.text = "이벤트 핸들러 중립"
}
}
}
}
builder.setTitle("기본 다이얼로그")
// 메시지
builder.setMessage("기본 다이얼로그 입니다.")
// 아이콘
builder.setIcon(R.mipmap.ic_launcher)
builder.setPositiveButton("EventOK",eventHandler)
builder.setNegativeButton("EventCancel",eventHandler)
builder.setNeutralButton("EventNeutral",eventHandler)
builder.show()
}
LayoutInflater 클래스는 레이아웃 XML 파일을 코드에서 초기화하는 기능을 제공한다.
초기화된 XML 파일에 선언한 뷰를 코드에서 이용하고자 생성하는 작업을 의미
XML 파일은 텍스트 파일일 뿐이며, 결국 코드에서 이용하려면 xml에 선언한 대로 객체를 생성해서 메모리에 할당해야 한다. -> 이 작업을 LayoutInflater가 해준다.
fun customerDialog(){
val dialogBinding = CustomDialogBinding.inflate(layoutInflater)
val builder= AlertDialog.Builder(this@MainActivity)
builder.setTitle("커스텀 다이얼로그")
builder.setIcon(R.mipmap.ic_launcher)
// 새로운 뷰를 시작한다.
builder.setView(dialogBinding.root)
dialogBinding.editTextDialog1.requestFocus()
// 쓰레드를 주고 키보드 올리기
thread {
SystemClock.sleep(500)
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(dialogBinding.editTextDialog1,0)
}
builder.setPositiveButton("확인"){ dialogInterface: DialogInterface, i: Int ->
val str1 = dialogBinding.editTextDialog1.text.toString()
val str2 = dialogBinding.editTextDialog2.text.toString()
setTextView.text = "${str1}\n"
setTextView.append("${str2}")
}
builder.setNegativeButton("취소",null)
builder.show()
}