반응형

# Layout Inflater : https://developer.android.com/reference/android/view/LayoutInflater.html

안드로이드에서는 화면을 구성하는 방법으로  xml 레이아웃을 사용하는데, 이 xml 레이아웃 파일의 내용은 애플리케이션이 실행될 때 메모리로 로딩되어서 객체화 된다. xml 레이아웃에 정의된 내용을 메모리 상에 객체화되는 과정을 '인플레이션(inflation)' 이라고 한다. 

즉, xml 레이아웃 파일은 프로젝트가 빌드되는 시점에 이진 파일로 컴파일되어 애플리케이션에 포함되긴 하지만, 

실제로 실행시점이 되어서야 메모리에 로딩되어 객체화가 된다는 말이다.


예제 1)

onCreate(bundle saveInstanceState){

super.onCreate(saveInstanceState);


// 버튼 호출

setContentView(R.layout.activity_main); 

}

setContentView전에 button을 호출하게 된다면 당연히 오류가 난다. 

메모리상에 객체화 (로드) 되지 않은 데이타를 호출하려고 했기 때문에 오류가 나면서 애플리케이션이 중지된다.


즉, setContentView() 메소드의 역할은

  1. 화면에 나타낼 뷰를 지정
  2. xml 레이아웃의 내용을 메모리상에 객체화

그렇다면, 화면 전체에 나타낼 xml 레이아웃이 아니라 전체 화면 중에서도 일부분만 차지하는 화면 구성 요소들을 xml 레이아웃에서 로딩하여서 보여줄 순 없을까? 있다. 다만, 다른 메소드를 사용해야한다.  layoutInflater 라는 클래스를 사용하여서 해야한다. (페이지 216~)


예제 2)

getSystemService(Context.LAYOUT_INFLATER_SERVICE)

이렇게 layoutInflater를 참조시킨 후에 사용이 가능하다. 


참고 링크

  • 안드로이드 앱 프로그래밍
  • 안드로이드 개발자 센터 


+ Recent posts