다이얼로그 / 알림 (1)

k_hyun·2023년 2월 4일
0

다이얼로그

사용자와 상호 작용하는 대화상자이다.
토스트, 알림 창 등이 있다.

토스트

토스트는 화면 아래쪽에 잠깐 보였다가 사라지는 문자열을 의미한다.

콜백 이용

@RequiresApi(Build.VERSION_CODES.R)
fun showToast() {
    val toast = Toast.makeText(this, "종료하려면 한 번 더 누르세요.", Toast.LENGTH_SHORT)
    toast.addCallback(
        object : Toast.Callback() {
            override fun onToastHidden() {
                super.onToastHidden()
                Log.d("user", "hidden")
            }

            override fun onToastShown() {
                super.onToastShown()
                Log.d("user", "toast shown")
            }
        }
    )
    toast.show()
}

콜백 기능은 API레벨 30 버전에서 추가되었다.
토스트 객체의 addCallback() 함수에 Toast.CallBack 타입의 객체를 등록해서 사용할 수 있다.

날짜 및 시간 입력받기

날짜를 입력받을 때는 데이트 피커 다이얼로그
시간을 입력받을 때는 타임 피커 다이얼로그를 사용한다.

데이트 피커 다이얼로그


DatePickerDialog 생성자를 사용한다.
month값은 0 ~ 11까지 지정되며, 0은 1월을 의미한다.


TimePickerDialog 생성자를 사용한다.
마지막 매개변수로 시간을 24시간, 12시간 형태 중 어떤 것으로 출력할지 지정한다.

알림

안드로이드 다이얼로그의 기본은 AlertDialog이다.
앞에서 살펴본 데이트 피커, 타임 피커도 AlertDialog의 하위 클래스이다.

AlertDialog.Builder(context: Context!)

알림 창의 생성자는 protected로 선언되어 객체를 직접 생성할 수 없다.
따라서 AlertDialog.Builder를 생성하고 세터 함수로 정보를 지정한다.

알림 창 띄우기


버튼은 최대 3개까지만 추가 가능하다.
같은 함수를 여러번 사용하면 버튼은 중복되어 하나만 나타난다.

버튼의 이벤트 핸들러 등록

val eventHandler = object : DialogInterface.OnClickListener {
            override fun onClick(p0: DialogInterface?, p1: Int) {
                if (p1 == DialogInterface.BUTTON_POSITIVE) {
                    Log.d("user", "positive button click")
                }
                else if (p1 == DialogInterface.BUTTON_NEGATIVE) {
                    Log.d("user", "negative button click")
                }
            }

        }

        AlertDialog.Builder(this).run {
            ...
            setPositiveButton("YES", eventHandler)
            setNegativeButton("No", eventHandler)
            show()
        }

위와 같이 eventHandler 라는 이벤트 등록이 가능하다.

목록을 출력하는 알림창


setMultipleChoiceItems() 함수를 통해 여러개를 선택하고 선택한 값을 돌려받을 수 있다.

LayoutInflater

XML 파일을 코드에서 초기화하는 기능을 제공한다.
초기화란 XML 파일에 선언한 뷰를 코드에서 이용하고자 생성하는 작업을 의미한다.
XML에 선언한 객체를 생성해서 메모리에 할당한다.


리스트 뷰, 리사이클러 뷰의 항목 화면 등 액티비티의 화면을 목적으로 하지 않는 XML 파일들을 위해 사용한다.

val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rootView = inflater.inflate(R.layout.activity_one, null)

inflate() 함수의 반환값은 XML의 루트 태그에 해당한다.
ex) LinearLayout

val binding = ActivityOneBinding.inflate(layoutInflater)
val rootView = binding.root

위는 뷰 바인딩 기법을 활용하여 작성한 것이다.

커스텀 다이얼로그 만들기


dialog_input.xml을 바인딩을 통해 초기화한다.
이를 setView함수를 통해 view를 지정하여 사용한다.

0개의 댓글