본문 바로가기
Android 개발/android :: Tip

[안드로이드 Inflate] 현재 layout에 다른 layout 넣기 - Inflater 간단 사용법

by 독학하는 1인 개발자 2019. 9. 18.

Android 개발 Tip.

 

- Android Inflate (안드로이드 인플레이트)

 

layout 안에 또 다른 layout을 넣는 방법

 

Inflater (인플레이터) 사용하기

 

 

 

 

 

현재 layout에 그때그때 다른 layout을 집어넣고 싶을 때가 있다.

 

 

예를 들면

Framelayout이나 LinearLayout 등에

정해진 화면이 아니라,

그때그때 다른 화면을 동적으로 띄우고 싶은 경우이다.

 

 

그럴 때 간단하게 inflate()를 사용하면 된다.

 

 

 

1. 부모 Layout 만들기

우선, 다른 뷰를 담을 기반이 될 Layout부터 필요하다.

보통 FrameLayout을 많이 사용한다.

 

 

main.xml -> FrameLayout 생성

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <FrameLayout android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
 
</LinearLayout>
cs

 

main.xml에 FrameLayout을 하나 만들어 줬다.

 

이 FrameLayout에 그때그때 다른 화면들을 담을 것이다.

 

 

 

 

2. 자식 Layout 만들기

 

담을 화면이 될 xml 파일을 만든다.

자식은 필요한 만큼 생성하면 된다.

 

이 자식 xml 파일들을

위에서 만든 부모 FrameLayout에 넣는 것이다.

 

 

content_1_1.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="This is dynamic content." />
 
</LinearLayout>
cs

 

TextView를 하나 넣어 줬는데

물론 원하는 대로 디자인하면 된다.

 

 

 

 

 

3. inflate() 사용하기 (자바 코드)

 

원하는 곳에 다음 3줄만 넣어주면 된다.

 

1
2
3
FrameLayout contentFrame = findViewById(R.id.content_frame); // 1. 기반이 되는 FrameLayout
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); // 2. inflater 생성
inflater.inflate(R.layout.content_1_1,contentFrame,true); // 3. (넣을 xml 파일명, 기반 layout 객체, true) 
cs

 

이제 if문을 쓰든 switch문을 쓰든

 

3번째 줄의 코드만 따로 떼서

R.layout.content_1_1

이 부분만 경우에 따라 동적으로 바꿔주면 된다.

 

 

 

 

결과 화면

 

 

main.xml의 FrameLayout 안에

 

content_1_1.xml이 통째로 들어 간 모습이다.

 

 

 

 

댓글