본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] LayoutInflater와 Inflate 에 대해 알아보아요.

by 돼지왕 왕돼지 2012. 1. 23.
반응형

/ 안드로이드 / Android / Tutorial / 기초 강좌 / Inflate / LayoutInflater / xml / XmlPullParser / getSystemService / LAYOUT_INFLATER_SERVICE / from / view /   성능 / compile time / build time / R. / resource / MenuInflater / getMenuInflater /   getLayoutInflater / 패턴 / 인플레이트 / 인플레이터 / 한 줄 / inflater /


1. Information


Inflate 란 생소한 단어인데, 뭐 하는 녀석인가요?


Inflate 는 사전적 의미로 "부풀리다" 라는 뜻입니다.

안드로이드에서 inflate 를 사용하면 xml 에 씌여져 있는 view 의 정의를 실제 view 객체로 만드는 역할을 합니다.
마치 건물의 설계도( xml 정의 )를 쭉~ 그려놓고 inflate ( 부풀리다 ) 하면 펑~ 하고 실제 건물 ( view ) 가 완성된다는 데서 inflate 라는 단어를 사용한 것 같습니다.



기본적인 사용 패턴을 알려주세요


 inflate 를 사용하기 위해서는 우선 inflater 를 얻어와야 합니다.

LayoutInflater inflater = (LayoutInflater) getSystemService( Context.LAYOUT_INFLATER_SERVICE );



다음은 설계도 역할인 xml 이 필요합니다. 이 때 xml 의 root  view 의 type이 무엇인지 알아야 합니다.
예를 들어 xml 파일 이름이 inflate_example.xml 이고, root가 LinearLayout 이라면..

LinearLayout linearLayout = (LinearLayout) inflater.inflate( R.layout.inflate_example, null );



이제 가져온 view 를 화면에 그린다면..

setContentView( linearLayout );



취합해보면, 다음과 같은 패턴으로 주로 사용합니다.

LayoutInflater inflater = (LayoutInflater) getSystemService( Context.LAYOUT_INFLATER_SERVICE ); 
LinearLayout linearLayout = (LinearLayout) inflater.inflate( R.layout.inflate_example, null ); 
setContentView( linearLayout ); 




너무 간단해 보이는데, 요게 끝인가요?


먼저 인플레이터를 얻어오는 다른 방법이 있습니다.

LayoutInflater inflater = LayoutInflater.from( this );
LayoutInflater inflater = getLayoutInflater(); ( @activity )



인플레이터를 얻어오는 것과 inflate 를 하는 것을 한줄로 하려면..

LinearLayout linearLayout = (LinearLayout) VIew.inflate( this, R.layout.inflate_example, null );






뭐 추가적으로 알려줄 정보는 없나요?


 Inflater 는 성능상의 문제 때문에 compile time 에 완성된 xml 파일에 대해서만 적용 가능합니다.
즉, Runtime 에 작성되거나 제공되는 xml 에 대해서는 inflate 를 적용 할 수 없습니다.
다시 말해 R. 으로 시작되는 resource 파일들만 inflate 가능합니다.

overload 하고 있는 inflate API 함수들도 한번 같이 보죠.

View inflate( int resource, ViewGroup root )
View inflate( XmlPullParser parser, ViewGroup root )
View inflate( XMLPullParser parser, ViewGroup root, boolean attachToRoot )
View inflate( int resource, ViewGroup root, boolean attachToRoot )



마지막으로 지금까지 다룬 LayoutInflater 외에도 MenuInflater 도 있다는 것을 알려드리고 싶습니다
MenuInflater 는 getMenuInflater() 를 통해 얻어와서 ( @ activity ) void inflate( int menuRes, Menu menu )를 호출합니다.
이 메뉴 인플레이터도 성능상의 문제 때문에 compile time 에 생성된 xml, 즉 R. 으로 시작되는 resource 파일들에 대해서만 inflate 가 가능합니다.



2. Summary


- inflate 는 사전적 의미로 "부풀리다" 이며, 실제 Android 에서는 xml 파일에 정의되어 있는 view 에 대한 정의를 바탕으로 코드상에서 view 객체를 생성하는 것을 말합니다.

- inflate 는 inflater 얻어오기 -> inflate -> view 활용 의 패턴으로 주로 사용 됩니다.

- 가장 자주 쓰이는 inflater 는 LayoutInflater 이며 MenuInflater 도 있습니다.

- 성능상의 이유로 inflate 가능한 xml 은 compile time 에 resource 안에 있는 정의되어 있는 녀석들만 가능합니다.




3. References.


http://developer.android.com/reference/android/view/LayoutInflater.html 
  Android Developer Doc. LayoutInflater.

http://developer.android.com/reference/android/view/MenuInflater.html 
  Android Developer Doc. MenuInflater.



반응형

댓글22