■ view
view는 안드로이드화면에 보여지는 모든것들입니다. 이들은 viewGroup단위로 묶여지고 더 크게는 하나의 xml 파일로 구성되어집니다. 레이아웃이라해도 틀린말은 아니지만 엄밀히 따지자면 view들은 보이는 컴포넌트들, viewGroup은 보이지않는 컴포넌트라고 생각하시면됩니다. 아래 그림은 이런 뷰들의 계층구조를 나타낸겁니다. 잘모르겠다면 일단 안드로이드 레이아웃에 손대보는게 더 빠른길입니다.
허접틱해보이는 화면을 구성하기위해 viewGroup과 view간의 계층구조를 xml로 써내려간 코드입니다. 단순한 화면임에도 불구하고 많은 xml코드가 달라붙게 되니 view는 그리 만만한게 아닙니다. 물론 위지윅모드로 구성할수도있지만 그럴경우 해상도별 화면리사이징에 큰 문제가생기므로 xml코드도 볼줄 알아야합니다.
■ interface
interface는 의사소통입니다. interface를 통해 유저는 안드로이드에게 명령하고 안드로이드는 그에따른 처리후 답하는식의 활동을 할 수 있습니다. 물론 이러한 interface뿐만아니라 컴퓨터 : 컴퓨터 인터페이스 구조도 있습니다.
이러한 interface 구조를 통해 자판을 눌러 한글이 표시된다거나 홈버튼을 눌러 스마트폰을 끈다던지 사용자의 목적에 맞게 사용할 수 있습니다.
본론으로 들어가서 지난번 포스팅에서 컴포넌트에대해 화면에 노출시키기전까지만 했는데 이번엔 컴포넌트와 그에따른 interface를 구현하여 처리하는 방법을 알아보겠습니다.
(콜백이라는 의미를 알고있어야만 이 내용이 쉽게 이해되며 java 상속과 익명클래스및 인터페이스를 알고있어야만 이해가 쉬우니 잘 모르는분들은 사전 공부를 좀 해오시는편이 좋겠습니다.)
먼저 레이아웃에 들어가서 버튼하나를 추가해봅니다.
이미 TextView라는 컴포넌트가 있는상태에서 Button을 새로 추가해보았습니다. xml코드를 보여주는 이유는 나중에 코드부분에서 사용할 리소스상수를 적는것때문에 보여드리는겁니다.
레이아웃을 제외한 나머지 컴포넌트2개에는 모두 상단에 "android:id" 라는 태그가 붙어있습니다. 이 태그를 붙인 이유는 코드에서 리소스를 식별하여 사용하려는 이유입니다. 그러므로 중복되는 id를 사용할경우 애러가 나므로 주의하셔야합니다.
이제 코드부분을 살펴보겠습니다.
레이아웃에서 보던 xml 태그명이 안드로이드에서는 클래스명으로 동일하게 사용됩니다. 그래서 TextView라든지 Button가 그 예입니다. 어찌됬든 필드부분에 사용될 두개의 컴포넌트를 선언하고 null처리를 해주었습니다. 나중에 꼬임이 발생치않도록 미리 null을 가리키게 해두었습니다.
onCreate 함수내부에서 실제 동작이 모두 구현되어있는데 일단 실제 컴포넌트와 코드상의 객체를 연결하는 findViewById 라는 함수를 통해 리소스상의 상수를 객체에 연결시켜줍니다. 파라미터로는 당연히 연결될 리소스 상수가 되겠고 모든 컴포넌트는 View라는 클래스를 상속하기때문에 캐스팅하였습니다.
"버튼을 눌렀을때 이벤트가 발생한다" 라는 의미로 코드를 구성하였기때문에 이벤트처리리스너를 버튼에 달아주었습니다. 리스너는 한두개가 아니므로 api를 찾아보거나 어시스트를 활용하여 감에 잡히는대로 사용하는편이 좋습니다. 보면 매우 직관적으로 나와있기때문에 몇번 사용하다보면 어떤 이벤트를 활용하고자할때 이 리스너를 사용하면 되겠구나라는게 바로 생각되어지니 어려운점은 없습니다.
그리고 한가지 팁을 드리자면 컴포넌트에 달릴 리스너의 이름은 모두 "setOn<동작행위>Listener" 으로 시작하며, 내부에 정의될 형태의 인터페이스에는 "on<동작행위>Listener" 메소드를 사용합니다. 어긎나게 할경우 애러가 나겟지만 디버깅자체에서 해당 리스너가 파라미터로 넘어올수없으니 의도적으로 할 일도 실수로 할 일도 없습니다.
콜백메소드 내부에 사용자가 원하는 행동을 취하도록 코드만 삽입해주면 이것으로 interface 코딩이 끝나게됩니다. 위 코드에서는 tv에 택스트를 삽입하였습니다.
각 컴포넌트에는 여러가지 동작이 있는데 그중 버튼은 클릭의 위주로 작동하는 컴포넌트이므로 보통 click나 longClick가 주로 사용됩니다. 한 컴포넌트에 하나의 리스너만이 존재할 수도 있고 여러개가 존재할 수 있으니 이점 유의하시기 바랍니다.
'Lecture > Android' 카테고리의 다른 글
안드로이드 웹 캐시 삭제 (0) | 2012.07.07 |
---|---|
구글맵 api 와 keytool (0) | 2012.07.04 |
3. 레이아웃과 컴포넌트 (0) | 2012.05.21 |
2. 안드로이드 생명주기 (0) | 2012.05.09 |
1. 안드로이드 프로젝트 구성 (1) | 2012.05.04 |