기술 블로그

layoutInflater 본문

Android

layoutInflater

jaegwan 2018. 11. 17. 15:47
반응형

Layoutinflater 정리

Layoutinflater 정리

1. 기능

- XML layout 파일을 View 객체로 만드는 역할
- Layoutinflater는 getLayoutInflater() 또는 getSystemService(Class) 을 이용하여 만듬

2. 객체생성 방법(Method)

1) View inflate(int resource, ViewGroup root) 
Inflate a new view hierarchy from the specified xml resource. 

2) View inflate(XmlPullParser parser, ViewGroup root) 
Inflate a new view hierarchy from the specified xml node. 

3) View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot) 
Inflate a new view hierarchy from the specified XML node. 

4) View inflate(int resource, ViewGroup root, boolean attachToRoot) 
Inflate a new view hierarchy from the specified xml resource. 

resource: 프로젝트/res/layout 폴더에 있는 xml 파일
root: 지정한 리소스(xml 파일)를 붙일 부모뷰


3. 인플레이션 방법

1) 첫번째

// 부모뷰
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); 

// 인플레이터 획득
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// 인플레이트 되어서 부모뷰(scrollView)에 붙음
View subLayout = inflater.inflate(R.layout.sub_layout, scrollView);

// 서브레이아웃에 있는 텍스트뷰 변경 test
TextView subTextView = (TextView) subLayout.findViewById(R.id.textView);
subTextView.setText("서브테스트");

2) 두번째

// 부모뷰
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); 

// 인플레이터 획득
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// 인플레이트하지만 아직 부모뷰에 붙지는 않음
View subLayout = inflater.inflate(R.layout.sub_layout, null);

// 서브레이아웃에 있는 텍스트뷰 변경 test
TextView subTextView = (TextView) subLayout.findViewById(R.id.textView);
subTextView.setText("서브테스트");

// 부모뷰(scrollView)에 붙임
scrollView.addView(subLayout);


4. 인플레이터를 획득하는 다른 방법

1) LayoutInflater 에서 제공하는 메소드

LayoutInflater inflater = LayoutInflater.from(MainActivity.this);

2) Activity에서 제공하는 메소드를 이용

LayoutInflater inflater = getLayoutInflater();


5. root, attachToRoot 참고

inflater.inflate(int resource, ViewGroup root, boolean attachToRoot);

1) root
attachToRoot가 true일경우 생성되는 View가 추가될 부모 뷰
attachToRoot가 false일 경우에는 LayoutParams값을 설정해주기 위한 상위 뷰
null로 설정할경우 android:layout_xxxxx값들이 무시됨.

2) attachToRoot

true일 경우 생성되는 뷰를 root의 자식으로 만든다.
false일 경우 root는 생성되는 View의 LayoutParam을 생성하는데만 사용된다.


// android/view/LayoutInflater.java
// Temp is the root view that was found in the xml View temp;

...

ViewGroup.LayoutParams params = null;  

if (root != null) {  
 // Create layout params that match root, if supplied params = root.generateLayoutParams(attrs);

 if (!attachToRoot) {
  // Set the layout params for temp if we are not attaching.
  temp.setLayoutParams(params);
 }
}

...

if (root != null && attachToRoot) {  
 root.addView(temp, params);
}


반응형
Comments