Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 인공지능
- 자바
- ubuntu
- java
- 안드로이드
- commit
- Linux
- git
- node
- SSH Key
- express
- Q-Map
- IT 도서
- mean
- EC2
- Repository
- 깃
- cordova
- 저장소
- angularJs
- AWS
- Ionic
- gmaps
- ssh
- JSP
- Android
- HTML
- Retrofit
- rest
- node.js
Archives
- Today
- Total
UroA 개발 블로그
[Android] LayoutInflater 사용하기 본문
안드로이드 LayoutInflater 사용하기
안드로이드에서 레이아웃 XML파일을 View객체로 만들기 위해서는 LayoutInflater를 이용해야 합니다.
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_layout, parent, false);
이렇게 간단하게 사용 할 수 있지만 LayoutInflater를 생성하는법과 XML레이아웃을 inflate할때 알아야 할것과 주의해야 할것을 자세하게 알아 보겠습니다.
LayoutInflater 생성하기
1. getSystemService
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_layout, parent, false);
2. Activity의 getLayoutInflater() 사용
LayoutInflater inflater = getLayoutInflater();
액티비티에서는 LayoutInflater를 쉽게 얻어올수 있도록 getLayoutInflater() 메소드를 제공합니다. 엑티비티의 윈도우에 있는 getLayoutInflater()로 포워딩 해줍니다.
// android/app/Activity.java
public LayoutInflater getLayoutInflater() {
return getWindow().getLayoutInflater();
}
3. LayoutInflater 팩토리 메서드
LayoutInflater inflater = LayoutInflater.from(context)
View view = inflater.inflate(R.layout.my_layout, parent, false);
LayoutInflater에서는 LayoutInflater를 쉽게 생성 할 수 있도록 static factory 메소드 LayoutInflater.from()
을 제공합니다. 내부에서는 getSystemService를 호출합니다.
// /android/view/LayoutInflater.java
public static LayoutInflater from(Context ctx) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (inflater == null) {
throw new AssertionError("LayoutInflater not found.");
}
return inflater;
}
4. View 팩토리 메서드
View view = View.inflate(context, R.layout.my_layout, parent)
View에서는 LayoutInflater의 inflate까지 한번에 실행하는 View.inflate()를 제공합니다. 내부에서는 LayoutInflater.inflate를 수행합니다. 이때 주의할점은 parent를 지정한다면 자동으로 attach됩니다.
// /android/view/View.java
public static View inflate(Context context, int resource, ViewGroup root) {
LayoutInflater factory = LayoutInflater.from(context);
return factory.inflate(resource, root);
}
View inflate하기
inflate(int resource, ViewGroup root, boolean attachToRoot)
- 레이아웃 XML파일을 View객체로 만들기 위해서는 LayoutInflater내의 inflater 메서드를 사용합니다.
- resource: view를 만들고 싶은 레이아웃 파일의 id,
- root:
attachToRoot
가true
일경우 생성되는 View가 추가될 부모 뷰,attachToRoot
가false
일 경우에는LayoutParams
값을 설정해주기 위한 상위 뷰, null로 설정할경우android:layout_xxxxx
값들이 무시됨. - 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);
}
요약
- XML레이아웃 파일에서 뷰를 생성할때는 LayoutInflater를 이용해야 한다.
- LayoutInflater는 LayoutInflater.from(context)를 이용하여 얻을 수 있다.
- LayoutInflater객체의 inflate메서드를 이용하여 새로운 뷰를 생성 할 수 있다.
- root를 지정하지 않을 경우 xml상의 최상위 뷰의 android:layout_xxxxx들은 무시된다.
- attachToRoot를 true로 설정할경우 뷰를 생성할때 자동으로 root의 자식으로 추가된다.
'Programming > Android' 카테고리의 다른 글
[Android] SharedPreference 사용하기 ① (0) | 2015.11.25 |
---|---|
[Android] 개발속도 50배 빨라진 안드로이드 스튜디오 2.0 (0) | 2015.11.24 |
[Android] ListView 구현시 뷰홀더(ViewHolder) 사용하기 (1) | 2015.11.22 |
[Android] ListView 개념 & 예제 (0) | 2015.11.21 |
[Android] String Empty Check (빈 스트링 체크) (0) | 2015.11.20 |
Comments