240109 TIL #290 Android #13 Dialog

김춘복·2024년 1월 9일
0

TIL : Today I Learned

목록 보기
290/543
post-custom-banner

Today I Learned

오늘은 다이얼로그에 대해 공부했다.


Dialog

다이얼로그는 사용자와 상호작용하는 대화상자이다.

Toast

화면 아래쪽에 잠깐 보였다가 사라지는 문자열

  • 토스트는 makeText()함수로 만든다.
open static fun makeText(context: Context!, text: CharSequence!, duration: Int): Toast!

open static fun makeText(context: Context!, resId: Int, duration: Int): Toast!

// toast 객체 생성
val toast = Toast.makeText(this, "종료하려면 한번 더 누르세요", Toast.LENGTH_SHORT)
toast.show()	// 화면에 출력
  • 두번째 매개변수가 출력할 문자열

  • 세번째 매개변수가 화면에 출력되는 시간으로 아래의 상수를 사용한다.
    val LENGTH_LONG : INT = 약 5초
    val LENGTH_LONG : INT = 약 3초

  • setDuration(), setText() : 문자열과 화면에 보이는 시간 설정 가능한 함수

  • setGravity(), setMargin() : 토스트가 뜨는 위치를 정할 수 있는 함수


Picker Dialog

피커 다이얼로그는 앱에서 사용자에게 날짜나 시간을 입력받는 데 사용하는 다이얼로그이다.

DatePickerDialog

날짜를 입력받을 때 사용하는 다이얼로그

  • 생성자
DatePickerDialog(context: Context, listener: DatePickerDialog.OnDateSetListener?, year: Int, month: Int, dayOfMonth: Int)
  • 두번째 매개변수로 DatePickerDialog.OnDateSetListener 구현 객체를 등록하면 다이얼로그에서 사용자가 설정한 날짜를 콜백 함수로 얻을 수 있다.

  • 나머지 Int 타입 매개변수는 처음에 보이는 날짜이고, month는 0~11까지 즉, 0이 1월을 의미한다.

        val dateLog = DatePickerDialog(this, object: DatePickerDialog.OnDateSetListener{
            override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
                Log.d("event", "year : $year, month: ${month+1}, day: $dayOfMonth")
            }
        }, 2024, 0, 1)
        
        dateLog.show()

TimePickerDialog

시간을 입력받을 때 사용하는 다이얼로그

  • 생성자
TimePickerDialog(context: Context!, listener: TimePickerDialog.OnTimeSetListener!,
            hourOfDay: Int, minute: Int, is24HourView: Boolean)
  • 두번째 매개변수로 TimePickerDialog.OnTimeSetListener를 구현한 객체를 지정하면 사용자가 다이얼로그에서 설정한 시간을 얻을 수 있다.

  • 나머지 Int 타입으로 처음 보일 시간을 설정할 수 있다.
    마지막 매개변수를 true면 24시간, false면 오전/오후 선택가능 12시간이다.

        val timePickerDialog = TimePickerDialog(this, object:TimePickerDialog.OnTimeSetListener{
            override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
                Log.d("event", "time : $hourOfDay, minute : $minute")
            }
        }, 15, 0, true)
        
        timePickerDialog.show()

AlertDialog

안드로이드 다이얼로그의 기본인 알림창이다.

  • 알림창은 크게 제목, 내용, 버튼으로 영역이 나눠져있다.
    세 영역은 필수적이진 않다.

  • 알림창은 생성자가 protected로 선언되어 직접 객체를 생성하지 않는다.
    AlertDialog.Builder를 통해 빌더로 알림창을 만든다.

  • setIcon(), setTitle(), setMessage() 함수를 통해 아이콘, 제목, 내용을 지정할 수 있다.

  • 아래의 함수로 알림 창에 버튼을 지정할 수 있다.
    setPositiveButton()
    setNegativeButton()
    setNeutralButton()

  • 첫번째 매개변수는 버튼의 문자열이고, 두번째 매개변수는 클릭 시 처리할 이벤트 핸들러이다. 처리할 내용이 없으면 null을 대입한다.(null이라도 클릭시 창 닫힘)
    같은 함수를 여러번 사용하면 버튼은 중복되어 하나만 나타난다.

  • 예시

        val eventHandler = object : DialogInterface.OnClickListener {
            override fun onClick(dialog: DialogInterface?, which: Int) {
                if (which == DialogInterface.BUTTON_POSITIVE){
                    Log.d("event", "Positive Button click")
                } else if (which == DialogInterface.BUTTON_NEGATIVE){
                    Log.d("event", "Negative Button click")
                }
            }
        }

        AlertDialog.Builder(this).run {
            setTitle("text dialog")
            setIcon(android.R.drawable.ic_dialog_info)
            setMessage("정말로 종료하시겠습니까?")
            setPositiveButton("OK",eventHandler)
            setNegativeButton("Cancel", eventHandler)
            setNeutralButton("More", null)
            show()
        }

목록 선택

  • 목록을 제시하고 이 중 하나를 선택받는 알림창을 만들고자 한다면 아래의 함수를 이용한다.
open fun setItems(item: Array<CharSequence!>!, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!

open fun setMultiChoiceItems(item: Array<CharSequence!>!, checkedItems: BooleanArray!, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!

open fun setSingleChoiceItems(item: Array<CharSequence!>!, checedItem: Int, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!
  • setItems()
    두번째 매개변수는 항목 선택시 이벤트 핸들러로, 유저가 항목을 선택하면 onClick() 함수가 자동으로 호출되어 선택한 항목의 인덱스가 전달된다.

  • setMultiChoiceItems()
    다중 선택을 위한 체크박스가 함께 출력되는 항목을 만들어 준다.
    두번째 매개변수로 처음 체크 상태를 지정한다.
    세번째 매개변수로 체크 상태가 전달된다.

  • setSingleChoiceItems()
    하나만 선택할 수 있는 라디오 버튼으로 구성된 항목을 만들어준다.
    두번째 매개변수로 처음 선택할 항목을 지정한다.


커스텀 다이얼로그

다이얼로그를 만들다 보면 개발자가 원하는 형태로 창을 구성하고 싶을때 커스텀 다이얼로그를 사용한다.

  • 먼저, 커스텀 다이얼로그를 구성하는 레이아웃 XML 파일을 res/layout 폴더에 작성한다.

  • XML 파일을 LayoutInflater로 초기화해서 적용하면 된다.

val dialogBinding = DialogInputBinding.inflate(layoutInflater)
AlterDialog.Builder(this).run {
	setTitle("Input")
    setView(dialogBinding.root)
    setPositiveButton("닫기", null)
    show()
}
profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글