https://goni95.tistory.com/173
1️⃣LayoutInflater
XML 파일에 정의된 Layout을 View 객체로 객체화 하여 실제 메모리에 올려주는 역할을 합니다. 쉽게 말해서 View 객체를 반환합니다.
LayoutInflater를 사용하기 위해선 getSystemService(), getLayoutInflater(), LayoutInflater.from()으로 3가지 방법이 있고 LayoutInflater 객체를 통해 inflate() 메서드를 사용하면 됩니다.
onCreate() 메서드의 setContentView(R.layout.activity_main) 내부에서 같은 원리로 View들을 객체화 합니다.
getSystemService() | 기본적인 방법으로 context에서 LayoutInflater를 가져옵니다. |
getLayoutInflater() | 자신(액티비티)의 윈도우에 있는 LayoutInflater 객체를 가져옵니다. |
LayoutInflater.from() | LayoutInflater에 static으로 정의되어 있는 LayoutInflater.from()을 통해 객체를 만드는 방법 같은 context에서는 같은 객체를 리턴하기 때문에 굳이 멤버 변수로 선언하지 않아도 됩니다. |
inflate(resource : Int, root : ViewGroup?, attachToRoot : Boolean)
resourse : 객체화 하려는 Layout 파일
root : View 객체의 parent / 생성될 공간의 layout 객체
attachToRoot : true로 설정할 경우 root의 자식 view로 자동으로 추가
private val container: LinearLayout by lazy {
findViewById(R.id.linearLayout)
}
val inflater: LayoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val inflater: LayoutInflater = LayoutInflater.from(applicationContext)
val inflater: LayoutInflater = layoutInflater
inflater.inflate(R.layout.layout_file, container, true)
inflater.inflate(R.layout.layout_file, container, true)
inflater.inflate(R.layout.layout_file, container, true)
2️⃣View 및 ViewGroup
View란 화면에서 볼 수 있는 TextView, ImageView, ProgressBar, Button 등의 구성 요소들을 의미합니다.
View는 화면 어느 곳에 배치되어야 하는지에 대한 정보는 갖고있지 않기 때문에 View를 화면에 배치하기 위해선 ViewGroup이 필요합니다.
ViewGroup이란 View들을 담을 수 있는 Container로, ViewGroup 또한 View를 상속받아 구현되어있기 때문에 View로 인식될 수 있어 ViewGroup에 포함시킬 수 있습니다.
ViewGroup을 상속하여 화면 배치 송석을 갖는 Layout에는 LinearLayout, FrameLayout, RelativeLayout, GridLayout 등이 있고 Toolbar, ViewPager, ListView, RecyclerView도 ViewGroup을 상속받아 구현되었습니다.