[Android Study] 다이얼로그 - AlertDialog

728x90
반응형

* 안드로이드 다이얼로그의 기본은 알림 창으로 불리는 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은 처음에 선택되어 나타나는 인덱스

setItems
setMultiChoiceItems: BooleanArrayOf를 사용해 초기 값 지정해줘야 함

 

setSingleChoicItems

 

- 속성을 설정하는 함수를 사용할 수도 있다.

  • 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)

 

728x90
반응형
TAGS.

Comments