xml레이아웃파일을 보면
디자인 도구라고 생각 할 수도 있는데,
디자인 도구에서 주로 화면을 만들 었다.
근데 원본은 XML파일 이라는 것을 이미 알고 있을 것이다.
이 원본 XML파일을 보게 되면 버튼이라고 한다면
Button태그가 있을 것이다.
<Button> 태그가 레이아웃에 정의가 되어 있는데,
이 <Button>태그는 실제 버튼이 아니다.
그러니깐 우리가 프로그래밍 언어를 했다고 한다면,
화면에 버튼이 보인다 or 화면을 클릭 했을 때 무슨 동작을 한다라고 하며는
메모리에 버튼이 만들어 져있기 때문이다.
그래서 이 메모리에서 버튼이 만들어져 있기 때문이다.
그래서 이 메모리에 버튼이 만들어지는 것은
객체지향에서 new Button이라는 것을 실행해서 만들게 되는 것인데,
이 과정에는 없다.
결국에는 개발자가 이 같은 과정을 해주는게 아니라,
안드로이드 시스템에서 해준다는 거다.
그 시스템에서 해주는 역할을
"레이아웃인플레이터"라고 하는게 있어서 그 역할을 해주게 된다.
(레이아웃인플레이터가 그 역할을 한다는 거다)
그래서 XML파일에 있는 Button을
실제 메모리에 Button으로 만들어주는 과정을
"인플레이션" 과정 이라고 한다.
그래서
"레이웃인플레이션"이라고 하는 것을 이해하면
아~~ 동작이 이렇게 되는 구나 라는 것을 알 수 있을 것이다.
setContentView가 내부적으로 "레이아웃인플레이션"을 해주는거다.
즉, 메모리에 버튼을 객체로 만들어 주는 역할을 하게 된다.
그래야 실제 버튼이 만들어 진다.
근데 , 위에 코드를 실행하면 에러가 난다.
왜냐하면, 실제 버튼이 메모리에 만들어 져있지 않은데,
그 버튼에다가 뭔가 동작을 시킬려고 하니깐,
NullpointException이 발생하게 된다.
그래서 코드의 순서만 바꾸어도 에러가 발생한다.
그래서 "레이아웃인플레이션", 즉 메모리에 객체화하는 과정에 대해서 알고 있으면 된다.
Activity라고 하는 화면에서는
setContentView()라는 메소드가 있어서
거기다가 XML레이아웃 넣어서 XML레이아웃을 메모리 상에 객체화를 해준다.
( setContentView() 도 레이아웃인플레이션의 일부임 )
( setContentView() = 레이아웃인플레이션 )
만약 "전체화면"이 아니고 "부분화면"이라고 하며는
전체화면 안에 들어가는 일부분을 말한다.
거기서는 setContentView()라는 것을 사용 할 수가 없게 된다!!!!!!!!!!!
그래서
"레이아웃인플레이터서비스"라는 것을 이용해서
직접 인플레이션을 해줘야 한다.
그러면 "레이아웃인플레이터서비스"라고 하는 것을 이용해서
직접 인플레이션하는 과정(메모리에 객체화하는 과정)을 해야한다.
XML레이아웃에 있는 파일은 그냥 파일일 뿐이다!!!!!!
그 파일 안에 Button태그가 있다고 해서 바로 버튼이 되는 것이 아니다!!
인플레이션 하는 과정(메모리에 객체화하는 과정)을 꼭 해야 사용 할 수 있는 것이다.
- 참고 -
getSystemService() 메서드를 사용하여 성공적으로 객체를 생성하게 된다면 대부분 'Manager'라는 접미어가 붙은 관리 매니저 객체를 반환한다.
getSystemService(String name) 메서드의 매개변수를 사용하여 다음 표와 같은 객체를 얻는다.
- 사용 예 -
sub1.xml의 파일 안에 들어 있는 내용을 inflater(LayoutInflater)가 메모리에 올린거다,,
그런다음에 container에 붙여 준거다.
이게 "레이아웃인플레이션"의 과정이다
그리고 여기서 "레이웃인플레이션"을 하고 나서,
"부분화면"이든, "전체화면"이든 "인플레이션"을 하고 나며는
그 안에 들어가 있는 위젯(버튼, 등등)을 id를 이용해서 찾아서
찾아서 사용 할 수가 있다.
- 결과 -
'■ Android > Study' 카테고리의 다른 글
액티비티 구성요소 4가지 (0) | 2020.01.10 |
---|---|
[Android] Activity 생명주기(Life Cycle) (0) | 2020.01.07 |
[Android] 리소스(res) 종류 or 관리 (0) | 2019.12.23 |
뷰의 계층구조 (0) | 2019.12.22 |
모듈 수준의 그레이들(gradle) 간단 정리 (0) | 2019.12.20 |