[Android] Inflate View

kldaji·2021년 9월 3일
1

서론

Android 의 activityapplicationentry point 로 기본적으로 하나의 activity classxml file 이 동시에 존재해야 실제 기기에 화면을 띄울 수 있다는 사실은 개발자라면 알고 있는 상식이다. 하지만 activity 외에도 우리는 fragmentcustom view 와 같이 동적으로 화면을 변환시키기 위해서는 inflate 라는 method 를 잘 사용해야 한다. viewinflate 한다는 것이 무엇을 의미하며, 어떻게 응용할 수 있는지 함께 살펴보자.

본론

inflateimplicitly inflateexplicitly inflate 라는 두 가지 방법이 존재한다. implicitly inflate 에 대해 먼저 살펴보면 activity classonCreate callback 함수에 setOnContentView 라는 함수를 쉽게 찾아볼 수 있고 많이들 봐았을 것이다. 바로 이 함수가 implicitly inflate 이다. 즉, 암시적으로 (OS 가 직접) 개발자가 만들어둔 xml file 을 inflate 한다는 의미이다. 근데 inflate 가 대체 뭘까? inflateView 를 메모리에 객체화 한다는 뜻으로 xml file 에 있는 모든 View 들을 메모리로 가져다 놓는다고 생각하면 쉽게 이해할 수 있다. 앞서 언급한 implicit 하게 Viewinflate 한다는 것은 개발자가 따로 View 들을 메모리에 가져다 놓을 필요 없이 OS 가 직접 수행한다는 것이고, activity 의 경우 application 의 시작점이므로 어느 상황에서든 inflate 가 되어야 하기 때문에 OS 에서 관리하는 것 같다.
그렇다면 이제 우리는 explicit 하게 Viewinflate 하는 방법에 대해 알아보자. Viewinflate 하기 위해 필요한 준비물들이 몇 가지 있다. 바로 LayoutInflater 를 생성해야 한다. LayoutInflater 를 생성하는 방법은 다양하게 존재한다.

  1. context 에서 LayoutInflater 가져오기
val inflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
  1. activity 에서 LayoutInflater 가져오기
val inflater: LayoutInflater = getLayoutInflater()
  1. LayoutInflater.from()
val inflater: LayoutInflater = LayoutInflater.from(context)

LayoutInflater 를 가져오는 여러 방법에 대해 살펴보았고 이제 가져온LayoutInflaterViewinflate 하는 방법에 대해 살펴보자.

inflate(resource: Int, root: ViewGroup?, attachToRoot: Boolean)

위의 코드는 fragment 에서 종종 볼 수 있는데, resourcexml file 을 의미하고, root 는 생성될 Viewparent 를 의미한다. attachToRootroot 아래에 바로 추가를 할 것인지를 판단하는 flag 값이다. return 값은 attachToRoot 값에 따라 달라지는데 true 일 경우 root 가 반환되고, false 일 경우 가장 최상위 View 가 반환된다는데 필자는 최상위 View 를 반환한다는 의미가 잘 와닿지 않아서 좀 더 알아볼 필요가 있다고 생각한다.

LayoutInflater 를 가져와서 inflate 함수를 실행하는 것 외에도 특히 Custom View Class 를 생성해 View 들을 inflate 해야할 때 View class 에서는 유용한 inflate 함수를 제공해준다.

View.inflate(context, R.layout.my_layout, parent)

위의 코드는 앞서 언급했듯이 LayoutInflater 를 가져와서 inflate 함수를 실행하는 과정을 한번에 할 수 있도록 구현된 코드로 parent 값이 null 이 아니면 자동으로 attach 된다는데 필자의 경우 attach 에 대한 개념이 잘 잡히지 않는다고 생각해 우선은 View class 에서 쉽게 Viewinflate 할 수 있는 방법이 있다는 정도만 알고 있어도 좋다고 생각한다.

결론

inflate 가 무엇인지, 어떻게 실행하는 지에 대해서 알아보는 시간을 가졌다. 해당 method 의 속성 또한 잘 활용해야 하기 때문에 속성에 대해서는 추가적으로 포스팅할 계획이 있다. 이렇게 우리가 알아본 inflate 는 동기식 방식으로 비동기식 방식으로도 Viewinflate 할 수 있어서 공부해야 할 것들이 참 많다고 생각한다.

오늘은 Viewinflate 하는 방법에 대해서 알게되었으니 오늘도 필자는 성장했다.

Reference

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글