안드로이드 Inflate이란?

상환·2021년 10월 11일
3

안드로이드 공부

목록 보기
2/7
post-thumbnail

Inflate란?

사전적 정의로 '부풀리다, 올리다'라는 의미를 가지고 있다.

그렇다면 무엇을 부풀린다는 걸까?

안드로이드에서 inflate는 xml에 표기된 레이아웃들을 메모리에 객체화시키는 행동이다.
쉽게 말해, xml코드들을 객체화해 소스코드에서 사용하기 위함이다.

기본적으로 안드로이드에서 화면(Activity 단위)을 만들면 소스코드, 레이아웃.xml 이렇게 2개가 생성된다.
이때 Activity에서 setContentView() 함수가 바로 xml을 객체화시키는 Inflate동작이다.

class MainActivity : AppCompatActivity(){
	override fun onCreate(savedInstanceState: Bundle?){
    	super.onCreate(savedInstanceState)
        //inflate
        setContentView(R.lyaout.activity_main);
    }
}

그렇기에 우리는 setContentView()함수 밑에서 xml에 배치했던 UI요소들을 맘껏 끌어와 쓸 수 있는것이다. 바로 메모리에 올라가 객체화 되었기 때문이다.

다른 상황이라면?

오늘 말하고싶은 inflate는 다른 상황일 때에 초점을 두려한다.
만약, 다른 화면을 구성하는 xml을 불러오고 싶다면?, setContentView()가 없는 Fragment라면? 어떻게 해야될까?

어쨋든 자동으로 생성된 xml이 아닌 user가 추가적으로 만든 xml을 객체화 시키기 위해 Inflate과정이 필요하다.

//추가적으로 만든 xml을 객체화
val inflater = layoutInflater //getLayoutInflater()
//inflate(int resource, ViewGroup root)
val v1 : View = inflater.inflate(R.layout.activity_sub, null)
//Fragment
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    	//inflate(int resource, ViewGroup root, boolean attachToRoot)
        return inflater.inflate(R.layout.reserve_fragment_reserve, container, false)
    }
//viewBinding
    private var binding:MainActivityBinding? = null
    private val view get() = binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = MainActivityBinding.inflate(layoutInflater)
        setContentView(view.root)
    }

이 과정까지가 xml을 객체화하여 메모리에 올려놓는 과정이다.

profile
레모네이드 커피

0개의 댓글