다이얼로그

jihyo·2022년 7월 14일
0

Android

목록 보기
15/17

다이얼로그

  • 다이얼로그 : 사용자와 상호작용하는 대화상자. Toast, 날짜, 시간입력, 알림 창 등과 같은 커스텀 다이얼로그도 있다.

Toast 메시지

  • Toast : 화면 하단에 잠시 보였다가 사라지는 메시지로 사용자에게 간단히 특정 상황을 알릴 때 사용

01 Toast makeText

makeText()

Toast 클래스의 makeText() 메서드는 3개의 매개 변수를 가진다.
1. 애플리케이션 Context
2. 사용자에게 표시되어야 하는 텍스트
3. 토스트 메시지가 화면에 남아 있어야 하는 시간

3번째 매개변수에는 2개의 상수가 사용된다.

  • Toast.LENTH_LONG
  • Toast.LENTH_SHORT

토스트 메시지를 직접 출력하거나 변수에 넣어 출력하는 방법이 있다.
02 Toast 메시지 출력

기억해야할 것은 토스트 메시지는 show() 를 통해 화면에 출력한다.

날짜 또는 시간 입력받기

  • Picker : 사용자에게 날짜나 시간을 입력받는 데 사용하는 다이얼로그
    • DatePickerDialog : 날짜를 입력받을 때 사용하는 다이얼로그
    • TimePickerDialog : 시간을 입력받을 때 사용하는 다이얼로그

DatePickerDialog

DatePickerDialog 생성자
03 DatePickerDialog의 생성자

매개 변수 중 DatePickerDialog.OnDateSetListenr 구현 객체를 등록하면 다이얼로그에서 사용자가 설정한 날짜를 콜백 함수로 얻을 수 있다. 나머지는 처음에 다이얼로그로 보이는 날짜다. month 의 값은 0~11로 0이 1월이다.

DatePickerDialog 사용
04 DataPickerDialog 실행

onDateSet의 매개변수

  • view: DatePicker : 날짜 선택이 가능한 DatePicker
  • year : 선택된 연도
  • month : 선택된 월. 0 ~ 11로 0이 1월
  • dayOfMonth : 선택된 일. 1 ~ 31로 선택된 month 에 좌우된다

날짜를 선택하고 로그 확인한 결과
05 DatePickerDialog 날짜 선택

06 DatePickerDialog 로그

TimePickerDialog

TimePickerDialog 생성자
07 TimePickerDialog의 생성자

매개변수 중 TimePickerDialog.OnTimeSetListener 를 구현한 객체를 지정하면 사용자가 다이얼로그에서 설정한 시간을 얻을 수 있고 처음에 보일 시간을 Int 타입으로 설정할 수 있다. 마지막 배개변수는 12와 24시간 형태를 선택하는 Boolean 타입의 매개변수다.

TimePickerDialog 사용
08 TimePickerDialog 사용

하단에 아이콘을 누르면 모양 변경도 가능하다.
09 TimePickerDialog 변경

10 TimePickerDialog 로그

알림 창 AlertDialog

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개까지

11 AlertDialog

버튼은 최대 3개까지 가능하기 때문에 한국어로 작성된 버튼은 보이지 않고 마지막에 작성한 3개의 버튼만 보인다.

커스텀 다이얼로그

내가 만들고 싶은 구성으로 다이얼로그를 만들 수도 있다. 이걸 커스텀 다이얼로그라고 하는데 여기서도 AlertDialog 를 사용한다.

LayoutInflater

LayoutInflater : LayoutInflater 클래스는 레이아웃 XML 파일을 코드에서 초기화하는 기능을 제공한다. 직접 사용하는 대신 주로 Activity.getLayoutInflater() 사용하여 현재 Context에 연결되어 있고 실행 중인 기기에 대해 구성된 표준 LayoutInflater 인스턴스를 찾는다.
참고 : LayoutInflater 클래스는 스레드로부터 안전하지 않고 지정된 인스턴스는 단일 스레드에서만 접근해야 한다.

setContentView()와의 차이

  • setContentView() : 액티비티의 화면을 구성하는 레이아웃 XML 파일에 사용
  • LayoutInflater : 그 외의 리사이클러 뷰의 아이템 화면, 프래그먼트 XML 파일 등 액티비티의 화면을 목적으로 하지 않는 레이아웃 XML 파일에 사용

LayoutInflater 사용

XML 파일 초기화
val inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rootView = inflater.inflate(R.layout.액티비티, null)
  1. getSystemService() 함수로 LayoutInflater 를 얻는다.
  2. inflate() 함수를 호출하면서 초기화할 레아웃 XML 파일 정보를 매개변수로 전달한다.

inflate() 함수의 반환값은 초기화된 XML의 루트 태그에 해당하는 객체. ex) LinearLayout 이 루트라면 LinearLayout 을 반환

뷰 바인딩을 사용하고 있다면 더 쉬워진다.

뷰 바인딩을 적용한 XML 파일 초기화
val binding = ActivityBinding.inflate(layoutInflater)
val rootView = binding.root

커스텀 다이얼로그 만들기

1. 다이얼로그 레이아웃 XML 파일 만들기

  1. 이름을 입력
  2. 성별을 선택

이 두 가지로 구성된 다이얼로그를 만들어 볼 것이다. 레이아웃 파일 이름은 dialog_input 으로 한다.

dialog_input.xml
12 커스텀 다이얼로그 예시

MainActivity.kt
13 커스텀 다이얼로그 실행

setView() 함수에 매개변수로 뷰 객체를 전달하여 화면에 출력한다.

0개의 댓글