티스토리 뷰

ANDROID 프로그래밍

[Android] LayoutInflator

떡잎몬 2018. 7. 13. 21:11
반응형


오늘 안드로이드 앱 안에서 화면 / 레이아웃 전환 등에 쓰이는 LayoutInflater 에 대해 포스팅 해보겠습니다.

먼저, inflate 라는 단어의 뜻은 다음과 같습니다.

Inflate

부풀리다

부풀리다 라는 영어 뜻처럼, xml에서 만들었던 레이아웃을 View로 만들어 자바코드로 불러올때 사용하곤 합니다.

LayoutInflator

XML에 정의된 Resource(자원) 들을 View의 형태로 반환해 줍니다. 보통 자바 코드에서 View, ViewGroup 을 사용하거나, Adpter의 getview() 또는 Dialog, Popup 구현시 배경화면이 될 Layout을 만들어 놓고 View의 형태로 반환 받아 Acitivity에서 실행 하게 됩니다.

우리가 보통 Activity를 만들면 onCreate() 메서드에 기본으로 추가되는 setContentView(R.layout.activity_main) 메서드와 같은 원리라고 생각하시면 됩니다. 이 메서드 또한 activity_main.xml 파일을 View로 만들어서 Activity 위에 보여주고 있습니다. 사용자의 화면에 보여지는 것들은 Activity 위에 있는 View 임을 알아두셔야 합니다.


사용방법

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 위 코드를 레이아웃을 코드상 객체화 할 곳에서 적어주어 inflater 객체를 사용하기 위한 LAYOUT_INFLATER_SERVICE라는 시스템 서비스를 불러옵니다.


inflater.inflate(R.layout.sub_layout,container,true); 위처럼 inflater의 inflate 함수를 사용하면 첫번째 인수로 xml상의 Layout ID를 지정해주고, 두번째 인수로는 해당 layout으로 대체할 layout을 지정, 마지막으로 attachToRoot 값을 True / False / NULL 중에 하나로 넣어서 생성되는 View를 root의 자식으로 만들거나 / 그냥 생성시키거나 를 정해준다.

함수를 실행시키면 설정한 레이아웃으로 View가 변경됨을 볼 수 있습니다.



예제코드를 보여 드리면서 포스팅을 마치겠습니다.


package android.cadi.layoutinflater;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    LinearLayout layout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        layout = (LinearLayout) findViewById(R.id.container);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflater.inflate(R.layout.sublayout,layout,true);
                CheckBox checkBox = (CheckBox)layout.findViewById(R.id.checkBox);
                checkBox.setText("로딩되었어요");

            }
        });
    }
}

실행결과




반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 31
아카이브