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);
}