본문 바로가기

study/android

[android] LayoutInflater & Factory Method

728x90

LayoutInflater

LayoutInflater의 역할을 간단하게 설명하면  작성한 xml의 resource들을 View로 바꿔주는 역할이다. 이렇게 바뀐 view들로 화면을 구성하는 것이다.

onCreate() 메서드의 setContentView(R.layout.activity_main) 메서드와 같은 원리인데 layout으로 작성된  activity_main.xml를 View로 바꿔주고 보여주는 것이다.

 

 

1. Context

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_layout, parent, false);

여기서 View를 생성하는 inflate메서드는 아래와 같다.

inflate(int resource, ViewGroup root, boolean attachToRoot)

resource에 변경할 xml파일 리소스를, root에는 상위 View가 들어간다. 마지막 attachToRoot가 True일 경우 root에 들어간 View를 parent로 포함시키는 것이고, false일 경우에는 LayoutParms의 설정 대상이 됨

 

 

2. Activity

Activity에서는 아래처럼 더 간단하게 사용한다.

LayoutInflater inflater = getLayoutInflater();

여기서 getLayoutInflater()는 아래와 같이 동작한다.

public LayoutInflater getLayoutInflater() {
	return getWindow().getLayoutInflater();
}

 

3. LayoutInflater.from()

LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.my_layout, parent, false);

LayoutInflater에는 LayoutInflater를 쉽게 생성할 수 있도록 static factory method를 가지고 있다.

코드를 자세히 보면 내부적으로 getSystemService()를 호출하는 것을 볼 수 있다.

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 factory method

View에서는 Infalter의 inflate까지 한 번에 코드 한 줄로 해결할 수 있는 inflate()가 있다.

이것 또한 View의 static factory method라고 한다. static factory method가 위에서부터 계속 나오는데 factory method pattern을 의미한다. 이것에 대한 설명은 링크에서 되게 쉽게 설명되어있다.

View view = View.inflate(context, R.layout.my_layout, parent);

parent를 지정하면 자동으로 attach한다는 특징이 있다.

위 코드는 내부적으로 LayoutInflater.inflate()를 호출한다.

public static View inflate(Context context, int resource, ViewGroup root) {
	LayoutInflater factory = LayoutInflater.from(context);
	return factory.inflate(resource, root);
}

 

 

 

<참고>

https://medium.com/vingle-tech-blog/android-layoutinflater-b6e44c265408

https://hashcode.co.kr/questions/708/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-layoutinflater%EA%B0%80-%ED%95%98%EB%8A%94-%EC%9D%BC%EC%9D%B4-%EB%AD%94%EA%B0%80%EC%9A%94

728x90

'study > android' 카테고리의 다른 글

[android] AsyncTask  (0) 2019.09.20
[android] Volley  (0) 2019.09.19
[android] ViewPager & PagerAdapter + LayoutInflater  (0) 2019.09.17
[android] drawable  (0) 2019.09.17
[android] Activity & Intent  (0) 2019.09.10