본문 바로가기
Mobile

[Android] LayoutInflater, inflater

by 기저귀찬개발자 2019. 4. 12.

부분 레이아웃을 활용하여 xml파일을 java파일없이 다른 컨테이너에 부분 화면으로 활용할 때 쓰인 

구문이다... 첫줄밖에 모르겠다..

 

LinearLayout contentsLayout = (LinearLayout) findViewById(R.id.contentsLayout);

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.button, contentsLayout, true);

------------------------------------------------------------------------------------------

 

인플레이션.. 어렴풋이 이해는 간다 하지만 어렴풋이라는거... 어려운건 시스템서비스에 대한

기본 지식이 없다보니 뭔말인지 모르겠다 

getSystemService를 알아보자.

 

------------------------------------------------------------------------------------------

getSystemService(String name) 메서드의 매개 변수를 사용하여 얻게 되는 객체들



 name

반환되는 객체 

 ACTIVITY_SERVICE

 시스템 내부의 액티비티 상태를 파악하는 ActivityManager

 ALARM_SERVICE

 주어진 시간에 경고메시지를 발신하는 AlarmManager

 AUDIO_SERVICE

 오디오를 관리하는 AudioManager

 CONNECTIVITY_SERVICE

 네트워크 연결을 관리하는 ConnectivityManager

 DOWNLOAD_SERVICE

 HTTP 다운로드 작업을 수행하는 DownloadManager

 INPUT_METHOD_SERVICE

 입력 방법을 관리하는 InputMethodManager

 KEYGUARD_SERVICE

 keyguard를 관리하는 KeyguardManager

 LAYOUT_INFLATER_SERVICE

 레이아웃 리소르를 인플레이트하는 LayoutInflater

 LOCATION_SERVICE

 GPS를 통한 위치 서비스를 제공하는 LocationManager

 NOTIFICATION_SERVICE

 백그라운드 이벤트를 알려주는 NotificationManager

 POWER_SERVICE

 파워를 관리하는 PowerManager

 SENSOR_SERVICE

 센서 접근할 수 있는 SensorManager

 SEARCH_SERVICE

 검색을 사용하는 SearchManager

 TELEPHONY_SERVICE

 단말기내 전화를 관리하는 TelephonyManager

 UI_MODE_SERVICE

 UI 모드를 조절하는 UiModeManager

 VIBRATOR_SERVICE

 진동 관리하는 Vibrator

 WIFI_SERVICE

 Wi-Fi 연결을 관리하는 WifiManager

 WINDOW_SERVICE

 화면창을 관리하는 WindowManager

 

-------------------------------------------------------------------------------------------

 

SystemService란건 디바이스내에서 각각의 기능들을 관리하는 객체라는 걸 알았다.

중요한건 SystemService가 아니라 LayoutInflater가 수행하는 inflater 기능이다

알아보자.(상당히 어려워질 것 같다. 제길)

 

-------------------------------------------------------------------------------------------

 

LayoutInflater

1. XML문서에 정의된 레이아웃과 Child 뷰의 속성을 읽어 실제 뷰 객체를 생성해내는 동작.

2. 레이아웃의 정보대로 객체를 생성하고 속성 변경 메소드를 순서대로 호출하는 것.

3. 동적으로 View를 교체할 수 있으며 복합적인 View를 여러 곳에서 공통으로 사용하고자 할 때 유리

 

위 Inflater가 하는 행위가 inflate이다 

inflate란 xml에 씌어져 있는 view의 정의를 실제 view 객체로 만드는 역할을 한다.

 

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 

이 구문이 의미하는 바는 부분 화면을 구성할 xml 소스를 inflate 하기 위해 LayoutInflater를 불러오는

구문이라 할 수 있겟다.

 

inflater.inflate(R.layout.button, contentsLayout, true);

 

하지만 setContentView를 하지 않았는데 화면에 뜨는 이유는 무엇일까 찾아봤는데, inflate() 

인자 중 마지막 true라는 부분이 그 기능을 수행하는 것이였다. 이유도 모른채 한참 해맸음..

 

inflate() 메소드의 정의

 

         inflate(int resource, ViewGroup root)

                 resource - XML 레이아웃 리소스를 지정하는 값

                 root - 뷰들을 객체화하여 추가할 대상이 되는 부모 컨테이너

static LayoutInflater LayoutInflater.from(Context context)

 

static View inflate(Context context, int resource, ViewGroup root)

------------------------------------------------------------------------------------------

 

 

참조 : http://promobile.tistory.com/169" target="_blank">http://promobile.tistory.com/169

 

 

댓글