[Android Study] 다이얼로그 - AlertDialog
* 안드로이드 다이얼로그의 기본은 알림 창으로 불리는 AlertDialog이다. 알림 창은 크게 3가지 영역으로 구분된다.
- 알림 창의 생성자는 접근 제한자가 protected로 선언되어서 객체를 직접 생성할 수 없다. 그 대신 AlertDialog.Builder를 제공하므로 이 빌더를 이용해 알림 창을 만든다.
- 먼저 Builder를 생성하고 빌더의 세터 함수로 알림 창의 정보를 지정한다.
AlertDialog.Builder(context: Context!)
- 다음은 알림 창에 아이콘과 제목, 내용을 지정하는 함수이다. setIcon 함수는 제목 영역에 아이콘을 출력하며 setTitle 함수는 제목 문자열을 출력하고 내용에 간단한 문자열을 출력할 때는 setMessage 함수를 사용한다.
- fun setIcon(iconId: Int): AlertDialog.Builder!
- fun setTitle(title: CharSequence!): AlertDialog.Builder!
- fun setMessage(message: CharSequence!): AlertDialog.Builder!
- 다음은 알림 창에 버튼을 지정하는 함수이다. 첫 번째 매개변수는 버튼의 문자열이며 두 번째 매개변수는 사용자가 버튼을 클릭했을 때 처리할 이벤트 핸들러이다. 처리할 내용이 없다면 null을 넣어주면 된다. 버튼을 3개 이상 사용해도 버튼은 중복되어 최대 3개까지만 나타난다.
- fun setPositiveButton(text: CharSequence!, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!
- fun setNegativeButton(~~)
- fun setNeutralButton(~~)
- 버튼을 setPositiveButton, setNegativeButton, setNeutralButton 으로 구분하는 이유는 이벤트 핸들러에서 어떤 버튼이 클릭되었는지 구분하기 위함이다. 한 알림 창의 버튼 이벤트를 하나의 이벤트 핸들러에서 모두 처리할 수도 있는데, 이 때 어떤 버튼이 클릭되었는지를 구분해야 한다. 이 때 셋 중 어떤 함수를 사용했는지에 따라 이벤트 핸들러에 전달되는 매개변숫값이 달라서 그 값으로 구분한다.
val eventHandler = object: DialogInterface.OnClickListener {
override fun onClick(p0: DIalogInterface?, p1: Int) {
if (p1 == DialogInterface.BUTTON_POSITIVE) {
Log.d("positive button click")
} else if (p1 == DialogInterface.BUTTON_NEGATIVE) {
Log.d("negative button click")
}
}
}
(... 생략 ...)
setPositiveButton("OK", eventHandler)
setNegativeButton("Cancel", eventHandler)
- onClick 함수의 두 번째 매개변수가 이벤트가 발생한 버튼을 알려준다. DialogInterface.BUTTON_POSITIVE라면 setPositiveButton으로 만든 버튼이다. 따라서 이 값으로 버튼을 구분해 적절하게 처리해 주면 된다.
- 알림 창의 내용 영역에 간단한 문자열을 출력하는 setMessage뿐만 아니라 목록을 제공하고 이 중 하나를 선택받는 알림 창을 만들 수도 있다.
- fun setItems(items: Array<CharSequence!>!, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!
- fun setMultiChoiceItems(items, checkedItems: BooleanArray!, listener)
- fun setSingleChoiceItems(item, checkedItem: Int, listener) > checkedItem은 처음에 선택되어 나타나는 인덱스
- 속성을 설정하는 함수를 사용할 수도 있다.
- fun setCancelable(cancelable: Boolean)
- 사용자가 기기의 뒤로가기 버튼을 눌렀을 때 매개변수가 true이면 닫고 false이면 닫지 않는다.
- fun setCanceledOnTouchOutside(cancel: Boolean)
- 사용자가 알림 창의 바깥 영역을 터치했을 때 매개변수가 true이면 닫고 false이면 닫지 않는다.
* setCancelable함수는 AlertDialog.Builder(this).run { } 안에 작성하고 setCanceledOnTouchOutside 함수는 run 밖에 작성해야 한다. 이유는 setCancelable 함수는 AlertDialog.Builder 클래스의 함수이고 setCanceledOnTouchOutside 함수는 Dialog 클래스의 함수이기 때문이다.
AlertDialog.Builder(this).run {
setTitle()
setIcon()
setItems()
... (생략) ...
setCancelable(false)
setPositiveButton("닫기", null)
show()
}.setCanceledOnTouchOutside(false)
'Study > Android' 카테고리의 다른 글
[Android Study] 다이얼로그 - 소리와 진동 알림 (0) | 2024.03.20 |
---|---|
[Android Study] 다이얼로그 - 커스텀 다이얼로그 (1) | 2024.03.19 |
[Android Study] 다이얼로그 - Toast, 날짜/시간 (0) | 2024.03.17 |
[Android Study] 퍼미션 설정하기 (1) | 2024.03.16 |
[Android Study] 리소스 (1) | 2024.03.15 |