개발자가 필요할 때 사용자에게 메시지를 전달하는 용도로 사용하며 다이얼로그가 나타나 있을 때는 주변의 View를 사용할 수 없다.
메시지 전달이나 입력 등의 용도로 사용한다.
// builder.setPositiveButton("Positive",null)
// builder.setNegativeButton("Negative",null)
// builder.setNeutralButton("Neutral", null)
builder.setPositiveButton("Positive"){ dialogInterface: DialogInterface, i: Int ->
textView.text = "Positive 버튼을 눌렀습니다"
}
builder.setNegativeButton("Negative"){ dialogInterface: DialogInterface, i: Int ->
textView.text = "Negative 버튼을 눌렀습니다"
}
builder.setNeutralButton("Negative"){ dialogInterface: DialogInterface, i: Int ->
textView.text = "Neutral 버튼을 눌렀습니다"
}
기본 다이얼로그는 메시지와 최대 3개의 버튼을 제공할 수 있다.
// 다이얼로그 생성을 위한 객체를 생성한다.
val builder = AlertDialog.Builder(this@MainActivity)
// 타이틀
builder.setTitle("기본 다이얼로그")
// 메시지
builder.setMessage("기본 다이얼로그 입니다")
// 아이콘
builder.setIcon(R.mipmap.ic_launcher)
// 다이얼로그를 띄운다
builder.show()
기본 다이얼로그에 View를 설정하면 다이얼로그에 표시되는 모양을 자유롭게 구성할 수 있다.
dialogBinding = DialogBinding.inflate(layoutInflater)
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("custom dialog")
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()
textView.text = "${str1}\n"
textView.append("${str2}")
}
builder.setNegativeButton("취소",null)
builder.show()
다이얼로그를 통해 날짜를 선택할 수 있도록 제공되는 다이얼로그이다.
// 날짜를 선택하기 위해 사용하는 다이얼로그
val calendar = Calendar.getInstance()
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH)
val day = calendar.get(Calendar.DAY_OF_MONTH)
// 날짜 선택하면 동작할 리스너
val datePickerListener =
DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth -> textView.text = "${year}년 ${month}월 ${dayOfMonth}일" }
val pickerDialog = DatePickerDialog(this@MainActivity, datePickerListener,year,month,day)
pickerDialog.show()
다이얼로그를 통해 시간을 선택할 수 있도록 제공되는 다이얼로그이다.
val calendar = Calendar.getInstance()
val hour = calendar.get(Calendar.HOUR)
val minute = calendar.get(Calendar.MINUTE)
val timePickerListener =
TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute -> textView.text="${hourOfDay}시 ${minute}분" }
val pickerDialog = TimePickerDialog(this@MainActivity, timePickerListener,hour,minute,true)
pickerDialog.show()
val adapter = ArrayAdapter<String>(this@MainActivity,
android.R.layout.simple_list_item_1, itemList)
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("리스트 다이얼로그")
builder.setIcon(R.mipmap.ic_launcher)
// 어뎁터를 설정한다.
// i : 사용자가 선택한 항목의 순서값이 들어온다.
builder.setAdapter(adapter){ dialogInterface: DialogInterface, i: Int ->
textView.text = "선택한 항목 : ${itemList[i]}"
}
builder.setNegativeButton("취소", null)
builder.show()
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("다중 선택")
builder.setIcon(R.mipmap.ic_launcher)
// 체크 항목 초기화 배열
val boolArray = BooleanArray(itemList.size){
false
}
boolArray[7] = true
builder.setMultiChoiceItems(itemList, boolArray, null)
builder.setNegativeButton("취소",null)
builder.setPositiveButton("확인",){ dialogInterface: DialogInterface, i: Int ->
textView.text = ""
// 다이얼로그에서 listView를 추출한다
val alertDialog = dialogInterface as AlertDialog
// 현재 체크되어 있는 상태 정보를 추출한다.
// 처음에 체크 되어 있는 아이템과 후에 변경이 된 아이템이 담겨진다.
// ex) {순서값 = 체크여부} 리스트
val position = alertDialog.listView.checkedItemPositions
for(idx in 0 until position.size()){
// 현재 항목의 위치값을 가져온다.
val pos1 = position.keyAt(idx)
// 현재 번째 배열에 값을 넣어준다.
boolArray[pos1] = position.get(pos1)
}
for(idx in boolArray.indices){
if(boolArray[idx]){
textView.append("${itemList[idx]}\n")
}
}
}
builder.show()
누를 때 마다 배열 변경 할 경우
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("다중 선택 리스트 다이얼로그")
// 마지막 매개변수에 체크 상태가 변경되었을 때 동작하는 리스너를 설정해준다.
// 여기에서 체크 상태가 변경된 항목의 체크 상태 값을 BooleanArray에 담아 준다
// i : 체크 상태가 변경된 항목의 순서값
// b : 체크 상태
builder.setMultiChoiceItems(itemList, mutilChoiceList){ dialogInterface: DialogInterface, i: Int, b: Boolean ->
mutilChoiceList[i] = b
}
builder.setNegativeButton("취소", null)
builder.setPositiveButton("확인", ){ dialogInterface: DialogInterface, i: Int ->
textView.text = ""
for(idx in mutilChoiceList.indices){
if(mutilChoiceList[idx]){
textView.append("${itemList[idx]}\n")
}
}
}
builder.show()