Tools/Android Studio

[ Android Studio] 안드로이드 Inflate란?

리신 2021. 11. 1. 00:31
반응형

 Inflate란?

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

❗❔이 뜻은 뭘까?

 

안드로이드에서 Inflate는 xml에 표기된 레이아웃들을 메모리에 로딩된 후  객체화 시키는 과정이다.

쉽게 말해, layout에 그때 그때 다른 layout을 집어 넣을 수 있다는 얘기다. 
, 각기 다를 화면들을 한화면에 동적으로 띄우고 싶은 경우 사용된다.

 

 


🙄메모리를 객체에 올릴 수있는 함수는 setContentView() 가 아닌가?

화면을 Activity로 만들 경우 안드로이드에서는 Java or Kotlin 소스코드와, xml 인 레이아웃 파일 이렇게 두개가 생성된다.

이때, Activity에서 setContentView()가 바로 xml을 객체화시키는 Inflate 동작이다.

 

setContentView() 코드

 

Activity가 onCreate 될 때 setContentView()를 하기 때문에 바로 메모리에 객체가 올라가 있게된다.

그래서 setContentView() 함수 실행 후  해당 xml에 있는 UI적 요소들을 아래와 같이 가져와 쓸 수 있는 것이다.

Button button = findViewById(R.id.btn1); // JAVA
var button : Button = findViewById(R.id.btn1) // Kotlin

 


💡여러가지 상황에서도 저렇게 사용할 수 있을까?

답은 아쉽게도 아니다..

여러가지 상황이 있을 것이다. 

한 화면 안에서 다른 화면을 불러 오고 싶거나, setContentView()가 없는 Fragment는 어떻게 하지?

직접 객체화 시켜서 메모리에 올리는 수 밖에..

 

한 화면에 다른 화면을 들고 오고 싶을경우


[소스코드]

            // fragment_sub1.xml 객체화
            val inflater = layoutInflater
            val v1 : View = inflater.inflate(R.layout.fragment_sub1,frameLayoutMain, true)

            // fragment_sub1.xml에 있는 UI구성 요소 사용가능
            var textView1 : TextView = v1.findViewById(R.id.textView1)
            textView1.setText("Sub_Fragment1")

activity 에서 여러개의 화면을 보여 주고 싶을 경우 추가로 만든 fragment_sub1.xml을 객체화 시킴

inflate(resource: Int, root: ViewGroup?, attachToRoot: Boolean)

- resource : View를 만들고 싶은 레이아웃 파일의 id 
- root: 생성될 View의 parent를 명시
- attachToRoot: true 로 설정해 줄 경우 root의 자식 View로 자동으로 추가, false 일 경우 root는 생성되는 View의 layoutParam을 생성하는데만 사용

 

Fragment에서 Inflate 할 경우


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_sub2, container, false)
    }

 

 

 

 

반응형