본문 바로가기

프로그래밍/안드로이드

[안드로이드] 레이아웃 인플레이션(Layout Inflation)

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.




레이아웃 인플레이션 (Layout Inflation)


앞에서 우리는 화면을 구성하는 방법을 배웠습니다. 즉 안드로이드에서는 화면을 구성하는 방법으로 XML 레이아웃을 사용하는데 이 XML 레이아웃 파일의 내용은 애플리케이션이 실행 될 때 메모리로 로딩되어 객체화 됩니다. 이렇게 메모리에 객체화 하는 과정을 Inflation이라고 합니다.  처음 안드로이드 프로젝트를 만들면 아래 그림과 같이 하나의 XML 파일과 자바 파일이 생성되는 것을 볼 수 있습니다.



MainActivity.java 파일을 보면 setContentView(R.layout.activity_main); 이라는 코드를 볼 수 있습니다. 이 메소드는 화면에 나타낼 뷰를 지정하는 역활을 합니다. 즉 activity_main.xml에 정의된 뷰를 화면에 보여주라는 것을 의미합니다. xml에 정의된 전체 화면뿐만 아니라 일부 뷰만을 메모리 상에 객체화를 할 수 도 있는데 setContentView 는 화면 전체를 설정하는 역활을 하므로 이를 이용하기 위해서는 LayoutInflater라는 클래스를 사용 하여야 합니다. 예제를 통하여 LayoutInflater를 사용하는 법을 알아 보겠습니다.


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
<?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:textSize="50dp"
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="메인 액티비티" />
    
    <LinearLayout
        android:layout_marginTop="20dp"
        android:orientation="vertical"
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        
    </LinearLayout>
</LinearLayout>
 
cs


위의 화면은 다음과 같습니다.




화면에는 보이지 않지만 메인 액티비티라는 글자 밑에 레이아웃 하나를 생성 하였습니다. 그리고 따로 아래의 그림과 같은 button이라는 xml을 새로 추가하여 메인액티비티 밑에 만들어 놓은 레이아웃에 넣어 보도록 하겠습니다.


위에서 설명 한 것과 같이 LayoutInflater 클래스를 이용합니다. 먼저 메인XML에 ID가 layout인 리니어 레이아웃은 button.xml에 정의된 내용을 추가할 부모 컨테이너가 됩니다. getSystemService() 메소드를 이용하여 LayoutInflater객체를 참조한 후 inflater()메소드를 이용해 button.xml에 정의된 레이아웃을 추가하라는 의미 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.administrator.inflation;
 
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        LinearLayout layout = (LinearLayout)findViewById(R.id.linear);
 
        LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.button,layout,true);
 
    }
}
 
cs


실행화면은 다음과 같습니다.



메인XML에는 버튼이 없었지만 부분적으로도 추가할 수 있습니다.


이상으로 레이아웃 인플레이션에 대해 알아보았습니다.