디지털 양피지/Android2010. 6. 30. 11:21



2일차 정리
1. resource 외부화 하기
  코드 이외의 이미지, 문자열, 레이아웃, 간단한 에니메이션 등을 외부화 하여 사용한다. res 폴더 아래 R.java 로 저장이 되며 기본적인 것 들은 안드로이드에서 제공하고 있다. res 폴더내에 drawable, layout, value 등을 적절히 이용하여 외부화 한다. 

2. Activity 
   Activity의 생명주기에 따른 라이프 사이클을 이해하고 상황에 맞는 함수에 필요한 코드를 작성하도록 한다.

3. View
   비주얼 컴포넌트는 View 클래스로 부터 내려오며, 이들을 총칭하여 뷰라고한다. ViewGroup, Layout, Widget, Control 모두 View를 상속받아 만들었다.


<예제> 이미지 버튼 만들기
버튼 이미지를 만들고 터치시 이미지가 바뀌도록 해보자.

< 버튼이미지>

1. res 아래 drawable 폴더를 만들고 kara_1~5.jpg 를 넣어두자. 
   (폴더에 이미지를 넣을때 그냥 끌어다 놓으면 된다.)
2. drawable 폴더 아래 imagetest.xml을 만들자. 이때 주의 할 점은 반드시 소문자와 숫자를 포함한 파일을 만들어야 한다. 대무자를 사용하면 에러가 나다.(왜 그럴까?)
3. imagetest.xml을 다음과 같이 작성한다.

<리소스 만들기>

4. layout 아래 main.xml에 이미지 버튼을 추가해 준다.
   이미지 버튼에서 background를 새롭게 추가한 imagetest.xml로 설정하여 selection이 됐을때 이미지를 바꾸어주도록 한다. 터치스크린의 경우 포커스가 따로 없기때문에 터치를 하는 순간 이미지가 바뀐다.

<이미지 버튼 클래스 추가>

Adapter
  - 항목의 List 성격의 화면
          - ListView, 확장 메뉴, AutoComplete 등에 사용
          - Adapter 자체는 View가 아니다.
          - GoF의 Adapter Pattern을 사용하여 만들어짐.

<예제> 어뎁터를 이용한 체크박스 만들기


1. 기존에 프로젝트에 액티비티를 추가하여 만들자.(단순예제 용)

2. 매니페스트 파일에서 Application 탭에서 add 버튼을 눌러 Activity를 추가하자.
   2. 1 추가 후 오늘쪽에 name을 눌러 class를 만든다.
 2.2. 클래스 name은 AdapterActivity로 하자.


3. 만들어진 AdapterActivity.java를 수정한다.

  3. 1 ArrayAdapter를 사용하여 리소스를 넣어주고 각 리소스에 대한 레이아웃을 지정해 주자.
        - 안드로이드에서 제공하는 simple_list_item_multiple_choice로 하면 체크박스가 나온다.
   3.2 listview, lv에 adapter를 set해준다.
        - 이때 선택이 되게 하려면 setChoiceMode를 해서 multiple을 선택해준다.
# layout 속성을 바꿔서 라디오 박스등 안드로이드에서 제공하는 여러 종류의 형태로 만들수도 있으며 xml파일을 만들어 설정할 수도 있다.

#  예제에서 엑티비티를 추가하여 만들었다. 이전에 생성된 Activity가 있어 실행이 안되므로 실행시 다음과 같이 한다.
1. RunAs에서 컨피그 수정.

2. 현재 Activity를 선택하고, 구동한다.


<예제> 리스트 아래 리스트를 만들어보자(SimpleAdapter)


1. 기존 프로젝트에 다음과 같이 소스를 수정해보자.

1.1 ArrayList를 선언하고 HashMap을 타입으로 설정한다.
1.2 각각의 아이템을 추가해준다. 
     - 여기서 하나의 map은 하나의 list에 표시할 내용이다. item1은 해당 리스트의 이름이 되고 item2는 item1에 대한 설명이 되도록 할 것이다.
1.3 SimpleAdapter를 선언하고 속성을 추가한다.
     - 선언한 ArrayList:list를 넣어준다.
     - layout은 android에서 제공하는 것을 사용한다. (아마 TextView 두개로 이루어진 레이아웃일 것이다.)
     - 각 리스트에 표시할 내용은 list의 item1 과 item2임을 명시해준다.
    - 그리고, item1은 text1의 layout을 따르고, item2는 text2의 layout을 따름을 명시해준다.

# 실행해보면 위와 같은 Activity가 실행된다. 자신만의 layout이 필요하다면 layout을 새로 만들어 적용하도록 한다.

Layout
  - 레이아웃은 자체 UI는 가지지 않지만 화면에 어떻게 배치되는지를 결정하는 클래스다.
  - 레이아웃은 뷰를 상속 받아 만들어져 있으므로 중첩 구문이 가능하다. 즉 레이아웃이 다양한 레이아웃을 가질 수 있어 복잡한 레이아웃을 구성할 수 있다.
  - 레이아웃의 종류
   1. FrameLayout
      단순한 레이아웃. 자식 뷰를 좌상단 모서리에 고정, 추가시 이전 자식 view위에 쌓이게 하는 방식
   2. LinearLayout
      선형 레이아웃. 수직 혹은 수평으로 나열. 가장 많이 사용하는 레이아웃
   3. RelativeLayout
      자식 View 각각의 위치를 서로에 대한 상대적 값으로 설정
   4. TableLayout
      행과 열의 격자를 사용
   5. AbsoluteLayout
      절대 좌표를 이용하여 배치

<예제> 레이아웃을 이용한 리스트 만들기


# 안드로이드에서 제공되는 어댑터와 레이아웃으로 해결되지 않는다. 어댑터와 레이아웃을 만들어 사용한다.

1. 새로운 프로젝트를 만들고 VO(Value Object) 클래스를 만들자
  - src에 User 클래스를 하나 추가하고 다음과 같이 작성한다.

2. Layout을 작성한다.
   - layout/main.xml에 전체 화면인 ListView를 추가해 준다.

ListView 추가


  - 리스트 뷰안에 들어갈 중첩된 LinearLayout을 사용하기 위하여 layout을 하나 만든다.(layout/row.xml)

Layout 만들기


3. Layout.java파일에 만들어서 사용할 Adater(UserAdapter)를 추가한다.

UserAdapter 만들기


- getSystemService: 안드로이드에서 제공하는 시스템 서비스를 사용할 수 있다.
- LayoutInflater: 만들어놓은 xml파일을 객체로 부풀리는 역활을 한다. (xml파일을 초기화 할 때 사용한다.)

4. 데이터를 임의로 넣어줄 함수를 하나 만들어준다.

getUser 함수


5. User를 array로 만들고 onCreate함수를 작성한다.

onCreate 함수



Event
   - 원시 Event(java에서 사용하는) - KeyEvent, TouchEvent 등
   - 추상화(Delegation Model) Event - 


 - setOnXXListner(객체 A):
    객체 A는 아무 객체나 들어갈 수 없으며 class A implement OnXXListener 클래스를 만들어 구현해주어야 한다.

< 예제> 이미지에다 이벤트를 달아보자.

- 버튼에 리스너를 등록 한다.
- 이때 이벤틀 핸들러는 상속 받아 사용해야 하므로  Activity는 OnClickListener를  implement로 해주도록 한다.

클래스의 생성
 - 하나의 .java 파일에 A, B ..여러개의 class를 선언할 경우 여러개가 나온다.
 - inner class로 선언 할 경우 A, A$B.class로 나온다.
 - A의 class에 a 함수내에 함수를 선언하면 a 함수내에 B b1 = new B() { ... void b()} 로 선언하면 inner 익명 class 다. 컴파일 하면 A, A$1.class 로 나온다. 
 - inner 익명 클래스는 이벤트에서 많이 사용한다.
   위의 이벤트 예제는 아래와 같이 이너 익명 클래스로 만들어 사용할 수도 있다.


Custom View(p115)
   커스텀 뷰는 다음과 같을 때 주로 사용한다.
   1. 기본뷰 상속으로 일부분 변경 (대상이 되는 View를 상속 받아 만든다.)
   2. 여러 view를 합쳐서 원자적으로 만들 때 (Layout을 상속 받아 만든다.)
   3. 전혀 존재하지 않는 UI(View를 상속 받아서), 존재하지 않는 event 등

  뷰를 상속 받아 만들려면 다음과 같은 것들을 신경써서 만들어 주어야 한다.
   - UI : onDraw(Canvas c) - canvas는 그리기 작업자로 drawRect, line등 여러가지 메소드가 있다.
   - Size : onMeasure(width, height) 를 결정해 준다.
   - Event : onTouchEvent()
  새롭게 만들어지는 클래스 뷰는 xml에서 사용할 때 풀 패키지 넴임을 적어준다.
<com.paad.todolist.CustomView> ... 

<예제> 커스텀 뷰 만들기
 뷰를 상속받아 이미지 버튼을 만들어 보자
 - 이벤트로 달아보자.

소스파일: 
# 상송 받은 클래스의 생성자 소멸자는 소스에서 오른쪽 클릭하고 다음 메뉴를 이용한다.

# 상속받은 클래스의 함수를 오버라이드 하기 위해서는 오버라이드 메뉴를 사용한다.
   - onDraw, onMeasure, onTouchEvent를 상속 받아서 만든다.
Posted by 빨간 양말