Toast
: 화면 하단에 잠시 보였다가 사라지는 메시지로 사용자에게 간단히 특정 상황을 알릴 때 사용Toast
클래스의 makeText()
메서드는 3개의 매개 변수를 가진다.
1. 애플리케이션 Context
2. 사용자에게 표시되어야 하는 텍스트
3. 토스트 메시지가 화면에 남아 있어야 하는 시간
3번째 매개변수에는 2개의 상수가 사용된다.
Toast.LENTH_LONG
Toast.LENTH_SHORT
토스트 메시지를 직접 출력하거나 변수에 넣어 출력하는 방법이 있다.
기억해야할 것은 토스트 메시지는 show()
를 통해 화면에 출력한다.
DatePickerDialog
: 날짜를 입력받을 때 사용하는 다이얼로그TimePickerDialog
: 시간을 입력받을 때 사용하는 다이얼로그DatePickerDialog
생성자
매개 변수 중 DatePickerDialog.OnDateSetListenr
구현 객체를 등록하면 다이얼로그에서 사용자가 설정한 날짜를 콜백 함수로 얻을 수 있다. 나머지는 처음에 다이얼로그로 보이는 날짜다. month
의 값은 0~11로 0이 1월이다.
DatePickerDialog 사용
onDateSet
의 매개변수
view: DatePicker
: 날짜 선택이 가능한 DatePicker
뷰year
: 선택된 연도month
: 선택된 월. 0 ~ 11로 0이 1월dayOfMonth
: 선택된 일. 1 ~ 31로 선택된 month
에 좌우된다날짜를 선택하고 로그 확인한 결과
TimePickerDialog
생성자
매개변수 중 TimePickerDialog.OnTimeSetListener
를 구현한 객체를 지정하면 사용자가 다이얼로그에서 설정한 시간을 얻을 수 있고 처음에 보일 시간을 Int
타입으로 설정할 수 있다. 마지막 배개변수는 12와 24시간 형태를 선택하는 Boolean
타입의 매개변수다.
TimePickerDialog 사용
하단에 아이콘을 누르면 모양 변경도 가능하다.
DatePickerDialog
, TimePickerDialog
는 사실 AlertDialog
의 하위 클래스다.
알림 창은 3개의 영역으로 구분된다.
이 3개의 영역이 필수로 들어갈 필요 없다. 예를 들어, 제목과 버튼에 대한 정보를 지정하지 않으면 내용만 출력된다.
알림 창의 생성자는 protected
접근 제한자로 선언되어 있기 때문에 직접 객체 생성이 불가하다.
AlertDialog.Builder
가 제공되어 이걸 사용해서 생성해야 한다.
앞에서 제목, 내용, 버튼을 지정할 수 있다고 했다. 먼저 목에 붙일 아이콘, 제목, 내용을 지정하는 함수를 살펴보겠다.
open fun setIcon(iconId: Int): AlertDialog.Builder!
: 제목 영역에 아이콘을 출력
open fun setTitle(title: CharSequence!): AldertDialog.Builder!
: 제목 문자열을 출력
open fun setMessage(message: CharSequence!): AlertDialog.Builder!
: 내용 영역에 문자열 출력
open fun setPositiveButton(text: CharSequence!, listener: DialogInterface.OnClickListner!): AlertDialog.Builder!
open fun setNegativeButton(text: CharSequence!, listener: DialogInterface.OnClickListener!): AlertDialog.Builder!
open fun setNeutralButton(text: CharSequence!, listner: DialogInterface.OnClickListener!): AlertDialog.Builder!
버튼 관련 함수들의 공통점
null
대입(창이 닫힘)버튼은 최대 3개까지 가능하기 때문에 한국어로 작성된 버튼은 보이지 않고 마지막에 작성한 3개의 버튼만 보인다.
내가 만들고 싶은 구성으로 다이얼로그를 만들 수도 있다. 이걸 커스텀 다이얼로그라고 하는데 여기서도 AlertDialog
를 사용한다.
LayoutInflater
:LayoutInflater
클래스는 레이아웃 XML 파일을 코드에서 초기화하는 기능을 제공한다. 직접 사용하는 대신 주로Activity.getLayoutInflater()
사용하여 현재 Context에 연결되어 있고 실행 중인 기기에 대해 구성된 표준LayoutInflater
인스턴스를 찾는다.
참고 :LayoutInflater
클래스는 스레드로부터 안전하지 않고 지정된 인스턴스는 단일 스레드에서만 접근해야 한다.
setContentView()
: 액티비티의 화면을 구성하는 레이아웃 XML 파일에 사용LayoutInflater
: 그 외의 리사이클러 뷰의 아이템 화면, 프래그먼트 XML 파일 등 액티비티의 화면을 목적으로 하지 않는 레이아웃 XML 파일에 사용val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rootView = inflater.inflate(R.layout.액티비티, null)
getSystemService()
함수로 LayoutInflater
를 얻는다.inflate()
함수를 호출하면서 초기화할 레아웃 XML 파일 정보를 매개변수로 전달한다.
inflate()
함수의 반환값은 초기화된 XML의 루트 태그에 해당하는 객체. ex)LinearLayout
이 루트라면LinearLayout
을 반환
뷰 바인딩을 사용하고 있다면 더 쉬워진다.
val binding = ActivityBinding.inflate(layoutInflater)
val rootView = binding.root
이 두 가지로 구성된 다이얼로그를 만들어 볼 것이다. 레이아웃 파일 이름은 dialog_input
으로 한다.
dialog_input.xml
MainActivity.kt
setView()
함수에 매개변수로 뷰 객체를 전달하여 화면에 출력한다.