Intro : 시작을 위한 준비 1. 어플리케이션 개발을 위해 준비할 것들 ... 22 운영체제 ... 22 JDK와 SDK ... 22 이클립스(eclipse)와 ADT ... 24 2. 첫 번째 안드로이드 어플리케이션 ... 27 프로젝트 만들기 ... 27 프로젝트 빌드와 실행 ... 29 디버깅 ... 34 3. 안드로이드 어플리케이션 구조 ... 39 〈AndroidManifest.xml〉과 어플리케이션 시작 구조 ... 39 액티비티 상태 변화 ... 41 레이아웃과 리소스 ... 43 4. 뷰와 유저 인터페이스 요소들 ... 44 유저 인터페이스(User Interface) ... 44 뷰의 계층(View Hierarchy) ... 44 레이아웃 ... 45 위젯(Widgets) ... 46 UI 이벤트(UI Events) ... 46 메뉴(Menu) ... 46 Chapter 1 App - 다양한 액티비티 꾸미기 1. 액티비티 사이 애니메이션 전환 -「액티비티 애니메이션」 ... 50 2. 다이얼로그 기반 액티비티 -「다이얼로그 테마」 ... 52 3. 다이얼로그 꾸미기 -「커스텀 다이얼로그」 ... 54 4. 헬로 액티비티 -「헬로 월드」 ... 57 5. 액티비티 타이틀 꾸미기 -「커스텀 타이틀」 ... 59 6. 액티비티 시작을 다른 액티비티에 전달하기 -「포워딩」 ... 64 7. 액티비티 상태 저장하고 읽기 -「퍼시스턴스」 ... 67 8. 주소록 배지 사용하기 -「퀵 컨택츠 배지」 ... 72 9. 액티비티 결과값 받기 -「결과 받기」 ... 77 10. 액티비티 실행 방향 변경하기 -「리디렉션」 ... 81 11. 액티비티 계층 순서 변경하기 -「액티비티 순서」 ... 86 12. 액티비티 상태 저장과 복원 -「상태 저장과 복원」 ... 90 13. 안드로이드 배경 변경하기 -「안드로이드 바탕화면」 ... 93 14. 반투명 액티비티 만들기 -「반투명 액티비티」 ... 96 15. 반투명 액티비티 블러 효과 주기 -「반투명 블러」 ... 98 16. 액티비티 배경을 안드로이드 배경으로 -「액티비티 배경」 ... 100 Chapter 2 App - 알람과 알림 서비스 1. 시스템으로부터 알람 받기 -「알람 컨트롤러」 ... 104 2. 알람 서비스 만들기 -「알람 서비스」 ... 110 3. 다양한 모양으로 대화상자 만들기 -「다이얼로그」 ... 114 4. 컴포넌트 사이의 연결은 인텐트로 -「인텐트」 ... 124 5. 홈 스크린에 숏컷 만들기 -「숏컷」 ... 131 6. XML로 다양한 메뉴 만들기 -「메뉴」 ... 135 7. 알림 매니저 사용하기 -「알림 매니저」 ... 140 8. 알림 서비스 만들기 -「알림 서비스 컨트롤러」 ... 145 9. 토스트 윈도우를 알림으로 사용하기 -「문자열로 알리기」 ... 149 10. 상태 바에 알림 표시하기 -「상태 바」 ... 151 Chapter 3 App - 프리퍼런스와 서비스, 그리고 음성 1. XML로 프리퍼런스 화면 만들기 -「프리퍼런스」 ... 160 2. 한번에 프리퍼런스 값 모두 읽기 -「프리퍼런스 값」 ... 165 3. 프리퍼런스 의존 관계 만들기 -「프리퍼런스 의존 관계」 ... 168 4. 프리퍼런스 디폴트 값 만들기 -「프리퍼런스 디폴트 값」 ... 170 5. 코드에서 직접 프리퍼런스 구성하기 -「코드 프리퍼런스」 ... 172 6. 프리퍼런스 사용 고급 기법 -「프리퍼런스 고급」 ... 176 7. 안드로이드 검색 실행하기 -「검색 실행」 ... 184 8. 검색 결과 표시하기 -「검색 결과 표시」 ... 192 9. 포 - 그라운드 서비스 만들기 -「포-그라운드 서비스」 ... 196 10. 로컬 서비스 만들기와 바인딩하기 -「로컬 서비스 바인딩」 ... 204 11. 서비스 시작하고 종료하기 -「로컬 서비스 컨트롤러」 ... 210 12. 리모트 서비스 만들기와 바인딩하기 -「리모트 서비스 바인딩」 ... 212 13. 리모트 서비스 시작하고 종료하기 -「리모트 서비스 컨트롤러」 ... 223 14. 서비스에 인자 전달하기 -「서비스 인자」 ... 225 15. 문장을 음성으로 출력하기 -「음성출력」 ... 232 16. 음성인식 -「음성인식」 ... 236 Chapter 4 Content 1. 어플리케이션 포함 파일 읽기 -「에셋」 ... 242 2. 문자열 리소스 읽기 -「리소스」 ... 244 3. 스타일 문자열 사용하기 -「스타일 문자열」 ... 247 Chpater 5 Graphics Ⅰ 1. 알파 비트맵 만들기 -「알파 비트맵」 ... 252 2. 비트맵 애니메이션 만들기 -「비트맵 애니메이션」 ... 256 3. 호 그리기 -「아크」 ... 262 4. 다양한 이미지 디코딩 -「디코드 스트림」 ... 266 5. 2차원 비트맵 메쉬 -「비트맵 메쉬」 ... 271 6. 코드에서 비트맵 직접 생성하기 -「비트맵 픽셀」 ... 276 7. 카메라 미리 보기 -「카메라 미리 보기」 ... 282 8. 그리기 영역 묶어두기 -「그리기 클리핑」 ... 286 9. 컬러 필터 적용해서 그리기 -「컬러 피터」 ... 291 10. 컬러 매트릭스로 컨트라스트 구현 -「컬러 매트릭스」 ... 297 11. 나침반 만들기 -「컴파스」 ... 302 12. 비트맵 생성 옵션 조정하기 -「비트맵 옵션」 ... 307 13. 안드로이드 덴시티 -「덴시티」 ... 312 14. XML로 ShapeDrawable 정의하기 -「쉐이프 그리기 객체 Ⅰ」 ... 321 15. 직접 ShapeDrawable 만들기 -「쉐이프 그리기 객체 Ⅱ」 ... 326 16. 터치로 그림 그리기 -「터치 그리기 Ⅰ」 ... 330 17. 그리기에 페이드(fade) 효과 만들기 -「터치 그리기 Ⅱ」 ... 336 18. 백 스크린 비트맵 이용하기 -「레이어」 ... 343 19. 현재 폰트로 문자열 폭 측정하기 -「문자열 폭 측정」 ... 346 Chapter 6 Graphics Ⅱ 1. 3차원 공간상에 물체 만들기 -「OpenGL 뷰」 ... 352 2. 3차원 객체에 이미지 입히기 -「텍스처」 ... 370 3. 3차원 뷰에서 이벤트 처리하기 -「터치 회전」 ... 379 4. 2차원 뷰 위에 3차원 렌더링하기 -「투명 OpenGL 뷰」 ... 383 5. 그리기 선분에 패스효과 적용하기 -「패스효과」 ... 385 6. 패스 내 부 채우기 -「패스 채움 타입」 ... 390 7. 쉐이더 객체로 패턴 만들기 -「패턴」 ... 393 8. 픽처 객체로 메타파일 만들기 -「픽처 객체」 ... 397 9. 한번에 여러 선 그리기 -「선 그리기」 ... 400 10. 좌표 매핑으로 그리기 행렬 만들기 -「그리기 행렬 Ⅰ」 ... 403 11. 맞추기(fit) 행렬 만들기 -「그리기 행렬 Ⅱ」 ... 407 12. 자동 제거 기능 비트맵 만들기 -「제거 가능 비트맵」 ... 411 13. 영역 연산과 분해 -「영역 연산」 ... 418 14. 그레이디언트를 이용해 둥근 사각형 만들기 -「둥근 사각형」 ... 423 15. 센서 테스트 -「센서 테스트」 ... 427 16. 3D 위에 2D 뷰 만들기 -「오버레이」 ... 432 17. 스윕 그레이디언트 -「스윕」 ... 437 18. 문자열 정렬하기 -「텍스트 정렬」 ... 440 19. 다양한 서체 사용하기 -「서체」 ... 445 20. 유니코드 사용하기 -「유니코드」 ... 447 21. 2차원 버텍스 -「버텍스」 ... 451 22. 픽셀 합성 규칙 -「합성 규칙」 ... 456 Chapter 7 Media 1. 미디어 플레이어 만들기 -「미디어 플레이어」 ... 464 2. 비디오 플레이어 만들기 -「비디오 플레이어」 ... 474 Chapter 8 OS 1. 바이브레이터로 모스 부호 만들기 -「바이브레이터」 ... 480 2. 다양한 센서 테스트 -「센서」 ... 485 Chapter 9 Text 1. 링크 텍스트 만들기 -「링키파이」 ... 494 2. 스크롤 가능 텍스트 뷰 만들기 -「스크롤 텍스트 뷰」 ... 497 3. 움직이는 텍스트 -「마키 텍스트」 ... 500 Chapter 10 View - 위젯과 그 특성 1. 가장 간단한 위젯 버튼 사용해보기 -「버튼」 ... 504 2. 타이머 만들어 시간 측정하기 -「크로노미터」 ... 508 3. 날짜 입력 받기 -「날짜 선택 다이얼로그」 ... 513 4. 시간 입력을 위젯으로 받기 -「시간 선택 위젯」 ... 517 5. 이미지로 버튼 더 예쁘게 꾸미기 -「이미지 버튼」 ... 520 6. 이미지 원하는 대로 표시하기 -「이미지 뷰」 ... 524 7. 작업의 진행정도 깔끔하게 보여주기 -「단계 모드 프로그레스 바」 ... 529 8. 언제 끝날지 모르는 작업에 사용하는 프로그레스 바 -「무한 모드 프로그레스 바」 ... 534 9. 언제 끝날지 모르는 작업 중 사용자 조작을 막아야 할 때 -「무한 모드 프로그레스 다이얼로그」 ... 537 10. 사용자가 선택 사항 중 하나를 선택할 수 있게 하기 -「라디오 버튼 그룹」 ... 541 11. 점수를 줄 수 있는 편리한 위젯 -「레이팅 바」 ... 545 12. 스크롤 바 다양하게 꾸미기 -「스크롤 바」 ... 549 기본적인 스크롤 바 -「기본 스크롤 바」 ... 549 좀 더 예쁜 스크롤 바 -「사용자 이미지 스크롤 바」 ... 550 스크롤 바 위치 미세하게 조절하기 -「스크롤 바 스타일」 ... 553 13. 컨텐츠의 특정 지점으로 바로 갈 수 있게 하기 -「검색 바」 ... 557 14. 간편한 방법으로 웹 페이지 화면에 보여주기 -「웹 뷰」 ... 561 15. 다양한 테마 적용으로 단숨에 어플리케이션 외형 바꾸기 -「위젯-테마적용하기」 ... 565 16. 필요할 때 위젯을 보여주고 필요 없으면 숨기기 -「뷰의 가시성」 ... 570 17. 마음에 드는 위젯이 없다면 직접 만들기 -「사용자 정의 뷰」 ... 573 18. 포커스를 마음대로 조절하기 -「포커스」 ... 581 포커스 비활성화로 위젯 사용 못하게 하기 -「수직 방향 포커스 변화」 ... 581 포커스 진행 방향 변경하기 -「수평 방향 포커스 변화」 ... 584 포커스 진행 방향 변경 응용 -「원형 방향 포커스 변화」 ... 586 내부 선택이 가능한 아이템을 가지는 사용자 정의 뷰에서 포커스 다루기 -「사용자 방향 포커스 변화」 ... 588 Chapter 11 View - 레이아웃 1. 수직 또는 수평 한 방향으로 위젯 배치하기 -「리니어 레이아웃」 ... 598 기초적인 수직 배치 방법 -「리니어 레이아웃 - 수직배치」 ... 598 수직 배치 후 남는 빈 공간 채우기 -「리니어 레이아웃 - 수직 방향 화면 채우기」 ... 601 수직 배치 시 자식 뷰들의 크기에 가중치 부여하기 -「리니지 레이아웃 - 가중치」 ... 602 수평 배치 시 동일한 크기로 배치하기 -「리니어 레이아웃 - 수평 방향 배치」 ... 604 사용자 입력창 만들기 1 -「리니어 레이아웃 - 사용자 입력창」 ... 606 가장 큰 뷰에 크기 맞추기 -「리니어 레이아웃 - 동일 크기 자식 뷰」 ... 610 부모 뷰의 크기 결정에 따르기 -「리니어 레이아웃 - 자식 뷰 정렬」 ... 613 가중치 속성으로 큰 뷰를 적절한 크기로 만들기 -「리니어 레이아웃 - 가중치의 또 다른 특징」 ... 616 여러 뷰를 하나의 뷰처럼 쓰기 -「리니어 레이아웃 - 자식 뷰와 상태공유」 ... 618 2. 상대적인 위치로 위젯 배치하기 -「상대 위치 레이아웃」 ... 621 수직 배치 흉내내기 -「상대 위치 레이아웃 - 수직 방향 배치」 ... 621 사용자 입력창 만들기 2 -「상대 위치 레이아웃 - 사용자 입력창」 ... 623 3. 화면 스크롤시키기 -「스크롤 뷰」 ... 626 스크롤 뷰 선언하기 -「내용이 적은 스크롤 뷰」 ... 626 실제로 동작하는 스크롤 뷰 살펴보기 -「내용이 많은 스크롤 뷰」 ... 627 사용자 정의 뷰에서 스크롤 구현하기 -「스크롤 뷰 - 사용자 정의 뷰와 어울리기」 ... 629 4. 자식 뷰를 표로 배치하여 정렬시키기 -「테이블 레이아웃」 ... 633 테이블 레이아웃 기초 사용법 -「테이블 레이아웃」 ... 633 표 사이사이에 빈칸 만들기 -「테이블 레이아웃 - 빈칸처리」 ... 634 긴 내용물은 줄어들기 속성으로 대처하기 -「테이블 레이아웃 - 줄어들기 속성」 ... 636 빈 공간을 늘여서 화면에 배치하기 -「테이블 레이아웃 - 늘이기 속성」 ... 638 늘이기 속성과 줄로 메뉴처럼 배치하기 -「테이블 레이아웃 - 줄긋기」 ... 640 늘이기 속성과 줄로 메뉴처럼 배치하기 2 -「테이블 레이아웃 - 줄긋기 응용」 ... 641 특정 열에 접었다 펴기 속성을 주어 공간 아끼기 -「테이블 레이아웃 - 특정 셀 접기」 ... 642 사용자 입력창 만들기 -「테이블 레이아웃 - 사용자 입력창」 ... 647 정렬 속성으로 다양한 위치 주기 -「테이블 레이아웃 - 정렬 속성」 ... 649 셀 합치기 -「테이블 레이아웃 - 셀 합치기」 ... 652 5. 다른 뷰와 문자열 위치를 어울리게 만들기 -「베이스라인 속성」 ... 654 리니어 레이아웃의 베이스라인 속성 익히기 -「베이스라인 속성 - 리니어 레이아웃」 ... 654 상대 위치 레이아웃에서 멀티 라인을 가지는 필드와 베이스라인 맞추기 -「멀티라인 베이스라인」 ... 659 리니어 레이아웃에서 특정 뷰를 지정하여 베이스라인 정렬하기 -「중첩된 뷰 - 베이스라인 속성」 ... 661 Chapter 12 View - 어댑터 뷰 1. 목록을 보여주는 위젯 -「리스트 뷰」 ... 666 2. 배열에 있는 문자열을 보여주는 리스트 -「리스트 뷰 - 배열 데이터」 ... 667 3. 주소록 연락처 리스트로 보여주기 -「리스트 뷰 - 전화번호부 연락처 데이터」 ... 669 4. 주소록에 있는 사람 이름을 전화번호와 함께 보여주기 -「리스트 뷰 - 전화번호부 전화번호 데이터」 ... 672 5. 필요한 어댑터가 없으면 직접 정의하기 -「리스트 뷰 - 사용자 정의 어댑터」 ... 675 6. 리스트 사이에 분리 기호 삽입하기 -「리스트 뷰 - 아이템 분리 기호」 ... 679 7. 사용자 어댑터를 응용하여 리스트 아이템을 접었다 펴는 동작 만들기 -「리스트 뷰 - 펼칠 수 있는 아이템」 ... 683 8. 아이템이 선택되었을 때 전화번호부의 전화번호 보여주기 -「리스트 뷰 - 아이템 선택 시 동작」 ... 688 9. 실시간으로 리스트 뷰에 아이템 추가하기 -「리스트 뷰 - 사용자 정의 어댑터 - 사진보기」 ... 694 10. 스크롤 시 중첩된 정보창으로 유용한 정보 보여주기 -「리스트 뷰 - 아이템 인덱스」 ... 700 11. 리스트 뷰를 단일 선택 모드로 사용하기 -「리스트 뷰 - 단일 선택 모드」 ... 706 12. 리스트 뷰를 다중 선택 모드로 사용하기 -「리스트 뷰 - 다중 선택 모드」 ... 708 13. 사용자가 입력한 데이터를 리스트 뷰에 필기록처럼 보여주기 -「리스트 뷰 - 필기록 모드」 ... 710 14. 데이터를 보여줄 필요가 있을 때만 가져오기 -「리스트 뷰 - 데이터를 천천히 가져오는 어댑터」 ... 714 15. 어댑터에서 뷰를 만들 때 좀 더 효율적인 방법 -「리스트 뷰 - 효율적인 어댑터」 ... 719 16. 정말 간단하게 구현하는 입력창 자동 완성 기능 -「자동 완성 텍스트 뷰」 ... 722 17. 커서 어댑터를 사용한 주소록 인명 자동 완성 기능 -「자동 완성 텍스트 뷰 - 사용자 정의 어댑터」 ... 724 18. 사용법을 잘 모르는 사용자를 위해 자동 완성창에 힌트 보여주기 -「자동 완성 텍스트 뷰 - 힌트기능」 ... 729 19. 자동 완성 기능 한 창에서 여러 번 사용할 수 있게 하기 -「다중 자동 완성 텍스트 뷰」 ... 731 20. 리스트 아이템 확장하여 사용하기 -「확장 가능한 리스트 뷰」 ... 733 21. 전화번호부를 사람별로 그룹지어 보여주기 -「확장 가능한 리스트 뷰 - 전화번호부」 ... 739 22. 간단하게 확장 가능한 리스트 뷰 사용하기 -「확장 가능한 리스트 뷰 - 간단한 사용법」 ... 742 23. 선택 가능한 아이템 중 사용자가 선택한 것 고정된 위치에 보여주기 -「갤러리 위젯」 ... 745 순차적으로 사진을 보여주는 갤러리 위젯 사용 방법 -「갤러리 위젯 - 사진 보여주기」 ... 745 순차적으로 주소록의 이름을 보여주는 갤러리 위젯 사용 방법 -「갤러리 위젯 - 주소록 보여주기」 ... 750 24. 아이템을 가상의 격자 공간에 보여주기 -「그리드 뷰」 ... 753 설치된 모든 어플리케이션 아이콘 격자 공간에 보여주기 -「그리드 뷰 - 아이콘 보여주기」 ... 753 이미지 격자 공간에 보여주기 -「그리드 뷰 - 사진 보여주기」 ... 756 25. 많은 선택 사항 다이얼로그로 띄워서 보여주기 -「스피너」 ... 759 26. 한 화면에 여러 개의 화면 통합하기 -「탭 위젯」 ... 763 ID로 화면을 지정해서 보여주기 -「탭 기능 - ID를 이용한 사용법」 ... 763 화면이 필요할 때 뷰를 생성해서 보여주기 -「탭 기능 - 팩토리를 이용한 사용법」 ... 767 이미 만들어진 액티비티 활용하기 -「탭 기능 - 인텐트를 이용한 사용법」 ... 769 Chapter 13 View - 애니메이션 1. 암호가 틀리면 로그인창 흔들기 -「애니메이션 - 흔들기」 ... 774 2. 여러 개의 애니메이션을 조합해서 새로운 애니메이션 만들기 -「애니메이션 - 조합하기」 ... 777 3. 애니메이션의 처음과 끝만 지정하고 나머지는 편리하게 안드로이드에 맡기기 -「애니메이션 - 인터폴레이터」 ... 783 4. 3D 전환 효과 구현하기 -「애니메이션 - 3D 전환」 ... 787 5. 이미지 부드럽게 전환하여 보여주기 -「이미지 전환기」 ... 796 6. 글자 부드럽게 전환하여 보여주기 -「텍스트 전환기」 ... 801 7. 레이아웃에서 배치 애니메이션 주기 -「레이아웃 애니메이션」 ... 804 그리드 뷰에서 아이템 서서히 나타나게 하기 -「레이아웃 애니메이션 - 그리드 뷰 - 서서히 나타나기」 ... 804 리스트 뷰에서 아이템 차례대로 나타나게 하기 -「레이아웃 애니메이션 - 리스트 뷰 - 차례대로 나타나기」 ... 808 리스트 뷰에서 아이템 역순으로 나타나게 하기 -「레이아웃 애니메이션 - 리스트 뷰 - 반대순서로 나타나기」 ... 811 그리드 뷰에서 아이템 무작위로 나타나게 하기 -「레이아웃 애니메이션 - 그리드 뷰 - 물결치듯 나타나기」 ... 815 레이아웃 애니메이션 여러 개 중첩해서 보여주기 -「레이아웃 애니메이션 - 중첩된 애니메이션」 ... 817