사용자와 상호 작용하는 대화상자이다.
토스트, 알림 창 등이 있다.
토스트는 화면 아래쪽에 잠깐 보였다가 사라지는 문자열을 의미한다.
@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() 함수를 통해 여러개를 선택하고 선택한 값을 돌려받을 수 있다.
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를 지정하여 사용한다.