** 오늘 발표 내용을 오늘에야 올리는 안드로메다급 개념.. (죄송합니다.. ㅠ.ㅠ) **

 

개인적으로 실습한 파일 첨부하려니 용량 초과로 안되네요.. 링크걸어 둡니다..

3장    4장

 

 

Chapter 3.

 

- 안드로이드 애플리케이션 구성요소

   - Activity

   - Services

   - Content Providers

   - Intents

   - Broadcast Receivers

   - Notifications

 

- 애플리케이션 Manifest

   - Manifest 파일

     - Application을 구성하는 각각의 component(activity, service, content provider, broadcast receiver)에 대한 노드를 포함.

     - Intent Filer Permission을 사용해 이들이 다른 component application과 어떻게 상호작용을 하는지를 결정.

   

 

- Application 우선순위와 프로세스 상태 이해하기 

   - Activity Process(활성 프로세스) : 현재 실행되어 사용자와 상호작용을 하고 있는 Process로 사용자의 이벤트에 반응.  onReceive 이벤트 핸들러를 실행중인 activity, service, broadcast receiver onStart, onCreate, onDestroy 이벤트 핸들러를 실행중인 서비스가 이에 속함.

   - Visible Process(화면에 보이는 프로세스) : 화면에는 보이지만 비활성 상태인 activity. 사용자의 이벤트에 반응하지않음.

   - Started Service Process : 서비스는 사용자와 직접적인 상호작용을 하지 않기때문에 화면에 보이는 activity에 비해 낮은 우선순위를 갖음.

   - Background Process : 화면에 보이지 않는 activity를 가지고 있고 실행중인 서비스가 없는 프로세스.

   - Empty Process : 안드로이드의 전체적인 시스템 성능 향상을 위해 수명이 다한 application을 메모리에 상주시키는데 이것이 empty process.

 

 

- Resource 외부화하기

  리소스의 유지, 업데이트, 관리상의 용이성이 확보된다.

 

   - 리소스 만들기

      - 간단한 값 생성하기

        문자열, 색상, 치수, 문자열 배열이나 정수 배열등. res/values폴더의 xml파일에 저장.

         - 문자열 : string 태그로 지정. ( : <string name="greeting">Hello</string> )

         - 색상 : color태그로 지정. #[A]RGB, #[AA]RRGGBB ([] : optional)

 ( : <color name= "green_color">#7700FF00</color> )

         - 치수 : dimen 태그로 지정. px(픽셀), in(인치), pt(포인트), mm(밀리미터), dp, sp 

 ( : <dimen name = "border">5px</dimen>

      - 스타일과 테마 : style 태그로 지정. style 태그는 'name' attribute와 하나이상의 'item' 하위 태그를 갖는다. item 태그는 'name' attribute를 포함해야 하며 또한 값을 가져야 한다.

      - drawable : 비트맵과 나이패치 이미지등이 해당. res/drawable폴더에 저장.

      - 레이아웃 : 화면에 보여지는 프리젠테이션 계층으로 xml 파일로 정의. res/layout폴더에 저장. 저장된는 파일이름이 resource 식별자가 된다.

      - 애니메이션

         - tweened animations : 뷰를 회전(rotate), 이동(translate), 페이드 효과(alpha), 크기변화(scale) 등을 주는데 사용. res/anim폴더에 xml 파일로 저장.

         - 프레임 바이 프레임 애니메이션 : 움직이는 drawable을 생성하기 때문에 res/drawable res/anim 폴더에 저장되며 파일이름이 resource식별자가 된다.

 

   - 리소스 사용하기

      - 코드에서 리소스 사용하기

        - 코드에서는 static 클래스인 R을 사용해 리소스에 접근. R클래스는 사용자가 정의한 리소스 타입별로 각각의 하위클래스를 가지고 있다. (R.string.app_name , R.drawable.icon)

        - 어플리케이션 컨텍스트에서 resource 인스턴스가 필요한 경우 getResources() method를 사용.    

      - 리소스에서 다른 리소스 참조하기

        - 리소스 내에서 다른 리소스를 참조하려면 '@' 표기법 사용.

          attribute = "@[packagename:]resourcetype/resourceID"

( : .... android:text="@string/hello" ... )

         - 시스템 리소스 사용하기

          어플리케이션 컨텍스트 내에서는 'android.R'을 통해 안드로이드 리소스 클래스 사용.

          사용자 정의 리소스 내에서는 '@android:resourcetype/resourceID' 사용

     

      - 현재테마에서 스타일 참조하기

        - 현재 적용된 테마로부터 스타일을 사용할 수 있게 하는 기능 제공. 리소스 내 '@'대신 '?android:'를 사용. (테마 적용은 manifest 파일에서 설정)

       

   - 여러 가지 언어와 하드웨어를 위한 리소스 만들기

      - 특정 언어와 위치, 하드웨어 구성에 따른 서로 다른 Resource 값을 생성할 수 있다. 동적으로 Resource를 선택할 수 있다.

        res/ 폴더 안에 병행 디렉토리 구조를 갖고, 지원하는 조건은 '-'으로 구분.

        사용 가능한 한정자는 언어, 지역, 화면방향, 화면픽셀밀도, 터치스크린타입, 키보드 사용, 키보드 입력타입, UI탐색타입, 화면해상도 등이 있다.

        제한 사항은, 어떤 조합이든 지원되지만 목록 순서대로 정의되어야 하며 하나의 한정자당 하나의 값만(언어를 en-ko... 이렇게는 못쓴다는..)

       

   - 런타임 구성 변경

     안드로이드는 각 어플리케이션을 종료하고 재시작한 뒤 리소스 값을 다시 읽어들임으로 언어, 위치, 하드웨어에 대한 런타임 변경을 지원함. 런타임 구성 변경을 감지하는 activity를 가지려면 manifest파일 activity노드에 'android:configChanges' 속성을 추가. 해당 속성 값은 orientation(화면 가로 세로 회전), keyboardHidden(키보드가 보여지거나 숨겨짐), fontScale(글꼴 크기 변경), locale(언어설정 변경), keyboard(키보드 종류 변경), touchscreen/navigation. 위 속성을 추가하면 해당 activity onConfigurationChanged 메소드가 호출됨.

       

       

- 안드로이드 액티비티 좀더 자세히 살펴보기

  하나의 액티비티는 화면 하나를 표현한다.

   - 액티비티 만들기

     - 새로운 액티비티를 생성하려면 Activity class를 상속받아 사용자 인터페이스를 정의하고 필요한 기능을 구현한다. activity에 사용자 인터페이스를 할당하려면 onCreate 메소드에서 setContentView를 호출. 액티비티를 사용하기 위해서는 manifestapplication 노드에 activity 노드 태그를 추가.

       

   - 액티비티 수명주기

     - 액티비티 스택 : 액티비티 상태는 현재 실행중인 모든 액티비티의 후입선출모음(last-in-first-out collection)인 액티비티 스텍에서 그가 차지하는 위치에 의해 결정.

     - 액티비티 상태

       액티비티의 상태 변경은 안드로이드 메모리 관리자에 의해 다뤄진다.

       - Active(화면에 보이고 사용자 입력 받음)

       - Paused(화면에 보이지만 포커스를 갖지 않음),

       - Stopped(화면에 보이지 않을 경우. 상태 및 정보를 유지한 채 메모리에 존재),

       - Inactive(activity가 종료되고 난 후, 실행되기 전 상태)

     - 액티비티 수명 이해하기

       - 전체 수명 : onCreate ~ onDestroy 사이.

       - 가시 수명 : onStart ~ onStop 사이. activity가 포커스를 갖지 않고, 부분적으로 가려지더라도 화면에는 보여짐.

       - 활성 수명 : onResume ~ onPause 사이. 사용자 입력 이벤트를 받는다.

   - 안드로이드 액티비티 클래스

     MapActivity, ListActivity, ExpandableListActivity, ActivityGroup 등이 있다.


 

 

Chapter 4.

 

- 뷰 소개

    안드로이드에 있는 모든 visual components View class로 부터 파생되며 이를 View라 함.

    ViewGroup 클래스는 여러개의 view를 담도록 설계된 view의 확장.

 

   - 뷰를 사용해 액티비티 사용자 인터페이스 만들기

     새로운 액티비티는 빈 화면 위에 사용자 인터페이스를 배치하는 것으로 시작.

     사용자 인터페이스를 설정하기 위해 일반적으로 onCreate메소드에 setContentView를 사용.

     findViewById()를 이용해 레이아웃내의 뷰 레퍼런스를 얻을 수 있다.

   - 안드로이드 위젯도구 상자

     간단한 인터페이스 생성을 돕는 표준 뷰 도구 상자를 제공.(TextView, EditText, ListView, Spinner, Button, CheckBox, RadioButton )

 

    

- 레이아웃 소개

    레이아웃은 화면 위에 있는 자식 컨트롤의 위치를 제어하기 위해 설계된 ViewGroup클래스의 확장이다.

    레이아웃의 종류는 FrameLayout, LinearLayout, RelativeLayout, TableLayout, AbsoluteLayout 등이있다.

 

   - 레이아웃 사용하기

     레이아웃 구현에 선호되는 방법은 외부 리소스를 사용해 xml로 구현하는 것. 코드로 레이아웃을 구현 할 수도 있다.  xml레이아웃은 반드시 단일 루트 엘리먼트를 가져야만 함.

 

- 새로운 뷰 만들기

    기존 컨트롤이 사용자가 원하는 기능을 제공한다면 그 컨트롤의 외관이나 동작방식을 수정.확장한다.

    기존 컨트롤을 바꾸거나 결합하는 방식으로 만들 수 없는 인터페이스라면 새로운 컨트롤을 생성한다.

   - 기존 뷰 수정하기

     기존에 정의된 뷰를 확장하여 새로운 모양(onDraw, onMeasure)이나 동작방식(onKeyDown, onKeyUp, onTrackballEvent, onTouchEvent)을 재정의 할 수 있다.

     **** 할일목록 수정해보기 ****

   - 복합 컨트롤 만들기

     서로 연결되어 배치된 여러 자식 컨트롤을 담는 원자적이면서도 재사용 가능한 위젯.

     **** 복합컨트롤 예제 ****

   - 커스텀 위젯 컨트롤 만들기

     **** 나침반 뷰 예제로 ****

 

- 메뉴만들고 사용하기

   - 안드로이드 메뉴 시스템 소개

     - 아이콘 메뉴 : 메뉴버튼을 누르면 화면 하단에 보여짐.

     - 확장 메뉴 : 아이콘 메뉴에 보여지는 메뉴 수가 한정되어있기(최대 6) 때문에 그 이상의 메뉴는 리스트 형태로 보여줌.

     - 하위 메뉴 : 메뉴의 하위 메뉴가 존재할 경우 다이얼로그 박스에 하위 메뉴를 보여준다

   - 액티비티 메뉴 정의하기

     - onCreateOptionsMenu 메소드를 재정의.

       메뉴를 추가하려면 Menu 객체에 add 메소드를 사용.

       각 매뉴 항목마다 1.메뉴항목들의 그룹값, 2.각 메뉴에 대한 유일한 식별자, 3.메뉴의 순서를 정하는 순서값, 4.문자열로 된 메뉴 텍스트 를 지정해야한다.

      

   - 메뉴 항목 옵션 : 체크박스, 라디오버튼, 단축키, 제목, 아이콘, 메뉴항목 클릭 리스너, 인텐트 등을 지원.

 

   - 동적으로 메뉴항목 업데이트 하기

     액티비티의 onPrepareOptionsMenu 메소드를 이용하여 메뉴가 표시될 때마다 어플리케이션 상태에 기반해 메뉴를 수정할 수 있다.

 

   - 메뉴선택 처리하기 : onOptionsItemSelected 메소드를 사용.

   - 하위메뉴와 컨텍스트 메뉴

     - 하위메뉴 만들기 : 하위메뉴는 addSubMenu 메소드로 추가 가능. 통상적인 메뉴를 추가하는데 사용되는 add 메소드와 동일한 매개변수를 지원함.

     - 컨텍스트 메뉴 사용하기

       - 컨텍스트 메뉴 만들기 : onCreateContextMenu 메소드를 재정의해 생성. 생성된 컨텍스트 메뉴를 사용해야 하는 뷰를 registerForContextMenu()를 사용해 등록한다.

       - 컨텍스트 메뉴 선택 다루기 : onContextItemSelected 메소드를 재정의하여 사용.

      

*** 메뉴 만들어 보기 ***