※ 출처 : 네이버 안드로이드 부스트코스(https://www.edwith.org/boostcourse-android/lecture/17056/) - '인플레이션 이해하기'

- 제가 나중에 보기 쉽게 제가 이해한 내용을 정리해놓은 것으로, 내용이 정확하진 않을 수 있습니다.



인플레이션 - XML레이아웃 파일안의 뷰 태그들을, 뷰 객체화 하여 메모리에 로딩하여 화면(뷰그룹)에 보일 수 있도록 해주는 과정


우선!


우리는 이미 모르는 새에 인플레이션 시키는 코드를 작성해본적이 있다.


Activity Java파일내의 onCreate() 내에 기본적으로 작성되어있는 setContentView(R.layout.머시기); 또한 인플레이션의 과정이라고 할 수 있다.

단, setContentView()는 액티비티가 onCreate()되면서 전체화면에 보여질 뷰를 지정할 때 사용되는 것이고, 전체화면이 아닌 일부분만을 차지하는 요소들을 직접 객체화하여 화면에 보여주고자 할때는 이 메소드 대신 LayoutInflater라는 클래스를 사용하여 직접 인플레이션의 과정을 거쳐야 한다.


setContentView(...) 를 통해 레이아웃이 메모리 객체화 되었음은,

setContentView() 코드 이전에 findViewById(...)를 사용하여 특정 뷰에 접근하려 할 때, xml파일이 객체화 되기 이전이므로, 빌드 시 에러가 생기게 되고, 이를 통해 확인할 수 있다.



-> 일부 뷰를 직접 객체화하여 하면에 보여주고자 할때! (- getSystemService()를 사용한다)


1.    객체화하고픈 xml파일을 res/layout 에 작성한다. (sub1.xml 이라는 이름을 주었다고 하자)

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

라는 코드를 사용해서 LayoutInflater 객체 사용할 준비.

3.    inflater.inflate(R.layout.sub1, container, true);

라는 코드를 통해서 사전에 미리 선언해뒀던 container라는 레이아웃에 작성했던 xml의 메모리객체가 삽입되게 된다.

매개변수 설명 : inflate( 1.객체화하고픈 xml파일, 2.객체화한 뷰를 넣을 부모 레이아웃/컨테이너, 3.true(바로붙이기..라는 의미라고한다))


결과: (엉성함주의)

[요약]







생각해보니 inflater를 활용한 예전에 작성했던 코드가 있다.

이때는 위에 설명한 내용과 방식과는 조금 상이하지만, 결국 같은 내용이라서 추가해보았다.


LayoutInflater의 inflate()메소드를 활용하여 원하는 xml코드를 메모리 객체화하여 view라는 이름을 붙였고,

이를 임의의 원하는 레이아웃에 동적으로 추가하는 java코드이다.


final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linear_layout_filter_subject);

View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.filter_white_button, null);


// view와 view를 삽입할 layout메모리 객체에 속성을 지정해주는 코드. 크게 의미x

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT

);

params.setMarginEnd(dpToPx(8));

TransitionManager.beginDelayedTransition(linearLayout);

view.setPadding(dpToPx(16),0,dpToPx(16),0);

view.setLayoutParams(params);

((Button)view).setText(selected);

     

linearLayout.addView(view, viewCount-1);



+ Recent posts