[Android Study] 다이얼로그 - 커스텀 다이얼로그

728x90
반응형

* 커스텀 다이얼로그는 다이얼로그에서 개발자가 원하는 형태로 창을 구성하고 싶을 때 사용한다.

 

 - LayoutInflater 클래스는 레이아웃 XML 파일을 코드에서 초기화하는 기능을 제공한다. 여기서 초기화란 XML 파일에 선언한 뷰를 코드에서 이용하고자 생성하는 작업을 의미한다. XML 파일은 텍스트 파일일 뿐이며 결국 코드에서 이용하려면 XML에서 선언한 대로 객체를 생성해서 메모리에 할당해야 한다. 이 작업을 LayoutInflater가 해준다.

 - activity의 화면을 구성하는 레이아웃 xml 파일이라면 layoutInflater가 아닌 setContentView() 함수를 이용한다.

 

 * layoutInflater로 레이아웃 XML 파일을 초기화하는 방법은 다음과 같다.

 - 우선 getSystemService 함수로 LayoutInflater를 얻는다. 그리고 inflate() 함수를 호출하면서 초기화할 레이아웃 XML 파일 정보를 매개변수로 전달한다.

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

 - inflate() 함수의 반환값은 초기화된 XML의 루트 태그에 해당하는 객체이다. 만약 XML 파일의 루트 태그가 <LinearLayout>이라면 LinearLayout객체를 반환한다. 

 - 뷰 바인딩 기법을 사용한다면 위의 코드를 더 간편하게 작성할 수 있다.

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

 - 초기화할 XML에 해당하는 바인딩 클래스에 inflate() 함수를 호출하면서 매개변수로 layoutInflater 객체를 전달만 해주면 자동으로 초기화되고 루트 뷰 객체를 얻을 수 있다.

 

* 커스텀 다이얼로그 출력

 - 먼저 다이얼로그를 구성하는 레이아웃 XML 파일을 만들어야 한다. res/layout 폴더에 dialog xml파일을 만들고 아래 코드처럼 LayoutInflater로 초기화해서 다이얼로그에 적용시키면 된다. AlertDialog의 setView() 함수에 매개변수로 뷰 객체를 전달하면 창의 내용 영역에 출력된다. 

 

728x90
반응형
TAGS.

Comments