본문 바로가기
Android 개발/Android UI

Android 에서 동적으로 View 추가하기 #LayoutInflater

by Developer88 2017. 2. 21.
반응형

안드로이드 앱을 만들다 보면, 동적으로 View를 추가해야 할 경우가 생기는 데요.

오늘은, 이럴 때 어떻게 해야하는지 정리해 보겠습니다.



1.  LayoutInflater


layout을 생성하는 것은 inflate한다고 하는데요.

참고로 inflate의 의미를 사전에서 찾아보면, 부풀리다라는 의미인데요.

View를 정의한 XML이나 Java파일대로 View를 inflate한다고 생각하면 될 것 같습니다.


inflate는 getLayoutInflater()를 이용해서 현재 context와 폰화면에 맞는,

LayoutInflater객체를 생성해서 사용해야 하는데요.

아래와 같이 layoutInflater객체를 얻어옵니다.



이제 inflate()메소드로 view를 inflate해줘야 하는데요,

먼저 view로 만들 xml을 하나 생성하고 가겠습니다.



2. inflate할 ViewXML 생성


아래와 같이 간단한 ImageView를 생성해 놓았습니다.

이제 inflate할 재료가 준비되었네요.

아래에서 부풀리기(inflate)를 해 보겠습니다.



그리고 이 뷰를 붙일 곳의 ViewGroup에 id를 붙여주어서, 나중에 java파일에서 Root로 지정해주겠습니다.
화살표 한 곳과  같이, LinearLayout을 root로 삼을 ViewGroup으로 사용하겠습니다.



3. Java 파일에서 inflate


이제 java파일에서 inflate()메소드를 이용하여, 위에서 만든 XML을 생성할텐데요.

코드를 적기전에 inflate()메소드의 소스코드 보고가겠습니다.


메소드의 첫번째 인자가, 부풀릴 XML소스이구요,

두번째 인자가, view의 부모 VIewGroup(이 View의 Root가 될)  을 지정해주는 것이구요,


세번째 인자는, 두번째 인자인 ViewGroup에 Attatch할 것인지를 묻는 것이군요.

여기서, false를 선택하면, ViewGroup은 그냥 LayoutParams를 전달하는 역할만을 한다고 하는군요.

(LayoutParams는 ViewGroup에 소속된 View가 어떻게 위치할 것인지를 알려주는 역활을 합니다.)


저희는 true로 하고, ViewGroup에 Attach시키겠습니다.




그럼 이제 실제로 inflate()메소드를 사용해보겠습니다.



아래와 같이 이미지뷰가 HelloWorld밑의 LinearLayout에 붙어서 잘나옵니다.




추가적으로, inflate메소드의 마지막 인자로 false를 주어서, root인 ViewGroup에 attach되지 않도록 한 후에,

수동으로 붙일수도 있는데요. 이 방법도 정리해보고 마무리 하겠습니다.

아래와 같이, root가 될 ViewGroup에 addView()메소드를 이용해서 attach를 나중에 할 수도 있습니다.



728x90

댓글