오늘은 다이얼로그에 대해 공부했다.
다이얼로그는 사용자와 상호작용하는 대화상자이다.
화면 아래쪽에 잠깐 보였다가 사라지는 문자열
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() : 토스트가 뜨는 위치를 정할 수 있는 함수
피커 다이얼로그는 앱에서 사용자에게 날짜나 시간을 입력받는 데 사용하는 다이얼로그이다.
날짜를 입력받을 때 사용하는 다이얼로그
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(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()
안드로이드 다이얼로그의 기본인 알림창이다.
알림창은 크게 제목, 내용, 버튼으로 영역이 나눠져있다.
세 영역은 필수적이진 않다.
알림창은 생성자가 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()
}