[24.07.11] TIL - 030

🎧 0. 오늘의 추천곡

오늘 하루도 출발해보겠습니다.

📕 1. 안드로이드 개발반 심화 강의

오늘은 드디어 강의를 끝냈습니다.

아직 궁금한 부분도 있고, 더 공부하고 싶은 부분도 있어, 과제는 내일부터 할 것 같습니다.

1-1. 다이얼로그

안드로이드 스튜디오에서는 다이얼로그라는 작은 창을 띄웠습니다.

val builder = AlertDialog.Builder(this)
            builder.apply {
                setIcon(R.drawable.ic_launcher_foreground)
                setTitle("알럴ㄹ트")
                setMessage("이건 알럴ㄹㄹ트 입니다.")
            }

            val listener = DialogInterface.OnClickListener { _, which ->
                when(which) {
                    DialogInterface.BUTTON_POSITIVE ->
                        binding.tvTitle.text = "굿"

                    DialogInterface.BUTTON_NEGATIVE ->
                        binding.tvTitle.text = "밷"

                    DialogInterface.BUTTON_NEUTRAL ->
                        binding.tvTitle.text = "엥"
                }
            }

            builder.setPositiveButton("좋아", listener)
            builder.setNegativeButton("싫어", listener)
            builder.setNeutralButton("그래", listener)

            builder.show()

위와 같은 코드로 AlertDialog를 작성할 수 있습니다.

val builder = AlertDialog.Builder(this)

먼저, 빌더를 만들어줍니다.

builder.apply {
                setIcon(R.drawable.ic_launcher_foreground)
                setTitle("알럴ㄹ트")
                setMessage("이건 알럴ㄹㄹ트 입니다.")
            }

이후, 빌더에 아이콘, 제목, 메시지 설정을 해줍니다.

val listener = DialogInterface.OnClickListener { _, which ->
                when(which) {
                    DialogInterface.BUTTON_POSITIVE ->
                        binding.tvTitle.text = "굿"

                    DialogInterface.BUTTON_NEGATIVE ->
                        binding.tvTitle.text = "밷"

                    DialogInterface.BUTTON_NEUTRAL ->
                        binding.tvTitle.text = "엥"
                }
            }

그 다음, DialogInterface의 OnClickListener 를 이용해서 각 Button에 기능을 추가해줍니다.

DialogInterface의 어떤 버튼인지는 which 변수에 따라 달라지게 됩니다.

builder.setPositiveButton("좋아", listener)
            builder.setNegativeButton("싫어", listener)
            builder.setNeutralButton("그래", listener)

이후 빌더에 각 버튼을 텍스트와 리스너를 같이 설정해줍니다.

builder.show()

마지막으로 빌더를 보여주게 되면 다이얼로그가 완성됩니다.

다음으로 커스텀 다이얼로그입니다.

위 AlertDialog에서 아래와 같이 뷰를 설정해주면 됩니다.

val v1 = layoutInflater.inflate(R.layout.dialog, null)
            builder.setView(v1)

이렇게 쓰면, setView를 통해서 커스텀으로 만든 뷰를 설정해주면 됩니다.

그 다음은 DatePickerDialog 입니다.

이는 이전에 봤던 Dialog와 달리, Calendar 정보가 필요합니다.

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 listener = DatePickerDialog.OnDateSetListener { view: DatePicker?, year: Int, month: Int, dayOfMonth: Int ->
                binding.tvTitle.text = "${year}년 ${month}월 ${dayOfMonth}일"
            }

            val picker = DatePickerDialog(this, listener, year, month, day)
            picker.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 listener = DatePickerDialog.OnDateSetListener { view: DatePicker?, year: Int, month: Int, dayOfMonth: Int ->
	binding.tvTitle.text = "${year}년 ${month}월 ${dayOfMonth}일"
            }

DatePickerDialog의 리스너인 DateSetListener를 설정합니다.

val picker = DatePickerDialog(this, listener, year, month, day)
picker.show()

마지막으로, DatePickerDialog를 만들고, show() 해주면 됩니다.

time picker도 비슷합니다.

val hour = calendar.get(Calendar.HOUR)
val minute = calendar.get(Calendar.MINUTE)

위와 같이 캘린더에서 시간과 분을 정보를 가져옵니다.

val listener = TimePickerDialog.OnTimeSetListener { view: TimePicker?, hourOfDay: Int, minute: Int ->
                binding.tvTitle.text = "${hourOfDay}시 ${minute}분"
            }

그리고, TimePickerDialog에 TimeSetListener를 설정합니다.

val picker = TimePickerDialog(this, listener, hour, minute, true)
picker.show()

그 이후, TimePickerDialog를 만들고, show() 해주면 됩니다.

1-2. 다이얼로그 정리

코드는 위와 같았고 결론적으로는 다음과 같은 순서를 따라갑니다.

Alert와 커스텀 다이얼로그는 AlertDialog.Builder() 를 사용해 빌더를 만들고 이에 설정값을 추가합니다.

그리고, DialogInterface.OnClickListener를 사용해 버튼에 추가할 리스너를 만들어줍니다.

이를 버튼에 설정해주고, 빌더를 show() 하면 됩니다.

DatePicker와 TimePicker는 Calendar에서 인스턴스를 받아와 정보를 가져옵니다.

그 정보를 DataPickerDialog.OnDateSetListener, OnTimeSetListener 에 연결해줍니다.

이후, 이 Listener와 Calendar에서 가져온 정보들을 가지고 DatePickerDialog, TimePickerDialog에 연결하고, show() 하면 됩니다.

🎯 3. 끝

내일부턴 과제를 시작하겠습니다.

벌써 금요일이네요.

끝.

P. S. 내배캠은 탈것을 뿌려라 !

profile
여기는 공부 기록용 블로그

0개의 댓글