📌 Intro
어플리케이션을 개발하면서 구현에 대한 감은 잡았지만 동작 원리나 기본 개념과 같이 기본적인 내용을 완벽하게 이해하고 있지 않은 것 같아서 이론적인 내용을 차근차근 정리하려고 한다.
그 중 첫 번째 내용은 레이아웃과 인플레이션에 관한 내용이다.
📌 setContentView
안드로이드 스튜디오에서 어플리케이션을 구현하는 방법은 2step으로 이루어진다.
- layout xml 구성
- 화면의 기능을 담당하는 소스코드 파일 구현
그리고 화면의 기능을 담당하는 소스코드는 기본적으로 위와 같이 setContentView() 메서드를 가지고 있다. 바로 저 메서드가 XML 레이아웃과 소스코드를 연결하는 역할을 한다.
파라미터로 받는 레이아웃과 현재 소스코드를 연결한다.
📌 LayoutInflation
- inflation(인플레이션)
XML 레이아웃의 내용이 메모리에 객체화되는 과정을 말한다. 앱이 실행되는 시점에 동작한다. 그래서 버튼의 레이아웃 인플레이션 과정은 다음과 같다.
만약 setContentView() 메서드보다 버튼을 참조하는 코드가 먼저오게 되면 메모리에 객체화되지 않은 버튼을 참조하려고 했기 때문에 NullPointerException이 발생한다.
📌 LayoutInflater class
- LayoutInflater
부분 화면을 메모리에 객체화 하기위해 필요한 클래스다. setcontentView() 메서드는 전체 화면만 가능하다.
LayoutInflater 시스템 서비스로 제공하는 클래스이므로 getSystemService(Context,LAYOUT_INFLATER_SERVICE) 메서드를 이용하여 LayoutInflater 객체를 참조한 후 사용해야 한다.
- View inflate(int resource, ViewGroup root, Boolean attachToRoot)
inflate() 메서드는 첫 번째 파라미터로 XML 레이아웃을, 두 번째 파라미터로 부모 컨테이너를 지정한다.
이 때 부모 컨테이너는 null도 가능하다. 만약 null을 넘기게 되면 layout.xml에서 지정한 android:layout_* 값들은 모두 무시된다.
📌 정리
앞서 설명한 내용을 간단하게 정리해보도록 하자.
예를 들어 위와 같은 화면을 만들고 시작버튼을 클릭하면 Sub layout이 나오는 기능을 추가한다고 하면 다음과 같은 순서로 진행해야 한다.
1. setContentView() 메서드 실행
2. 시작 버튼 참조 및 onClick 메서드 추가
3. onClick 메서드 내부에 LayoutInflater 클래스 참조
4. LayoutInflater 클래스의 inflate() 메서드를 통해 sub layout 인플레이션
5. 이외 기능 추가
📌 참고
[1] Do it! 안드로이드 앱 프로그래밍 8판