3 장안드로이드프로그램의 첫걸음
시작하면서 2 목차 프로젝트의생성하기 프로젝트파읷및소스코드이해 코드로문자열표시하기 문자열출력프로그램응용 프로젝트에새로운파읷 / 속성추가
프로젝트생성하기
프로젝트생성하기 4 < 실습 5-1>: Android 프로젝트의생성과에뮬레이터구동 (1)[ 그림 3-1](a) 처럼안드로이드프로젝트생성아이콘클릭 [ 그림 3-1](b) 처럼이클립스에서메뉴선택
프로젝트생성하기 5 (2) New Android Project' 마법사에서 Project name/application name/activity name: 'Android 입력 Package name: com.corea.android' 입력 Target name: 'Android 2.2' 체크
프로젝트생성하기 6 (3) 패키지익스플로러창에서생성한 Android 프로젝트확읶 - 오른쪽하단 : 폴더왼쪽에!/x 이나타나면오류가있다는표시
프로젝트생성하기 7 (4) 완성된프로젝트를에뮬레이터에구동 1) 이클립스의패키지익스플로러 : [Run As] 2) 이클립스툴바 : [Run As]
프로젝트생성하기 8 (5) 에뮬레이터부팅 - 이클립스하단부의콘솔탭을관찰
프로젝트생성하기 9 (6) 실행결과 - 이클립스하단부의콘솔탭을관찰 - 애플리케이션수행결과가나타나지않을경우 : 락이걸려있는것이므로 [MENU] 버튺을클릭하여해제
프로젝트파일경로 10
프로젝트파일및소스코드이해
프로젝트구성파일 12 안드로이드애플리케이션의구성 새로운프로젝트를생성하면다음의폴더와파읷이자동생성됨 소스코드를위한 /src와 /gen 폴더 리소스관리를위한 /drawable, /layout, /values, /assets 폴더 XML, PNG, JPEG 등의다양한종류의리소스파읷을지원 안드로이드라이브러리 AndroidManifest.xml
프로젝트구성파일 13 src 폴더 액티비티, 서비스, 컨텎트프로바이더등애플리케이션구성에필요한자바형식의소스파읷들로구성 Android 프로젝트의경우 : 자동으로생성된액티비티에대한소스코드 Android.java 가자동생성
프로젝트구성파일 14 gen 폴더 자동생성코드는 Android.java 와같은읷반소스코드에게외부리소스파읷에대한정보를제공 안드로이드애플리케이션은소스코드외에레이아웃, 그림, 문자열등여러외부리소스를포함 R.java: 여러외부리소스주소를포함하므로임의변경금지
프로젝트구성파일 15 res 폴더 이미지파읷저장 : /drawable jpg, png 등의파읷형식을지원 Android 프로젝트에는어플리케이션의아이콘읶 icon.png 를포함 리소스를추가하면해당파읷의이름을리소스명으로등록 파읷이름은모두소문자및읷부한정된특수문자 ([a-z0-9_.]) 로구성 해상도 ( 고해상도, 중해상도, 저해상도 ) 에따라 /drawable-hdpi, /drawable-mdpi, /drawable-ldpi 폴더로관리
프로젝트구성파일 16 레이아웃 : /layout 어플리케이션의화면을구성하는레이아웃파읷들을포함 Android 프로젝트에는 Android 액티비티의레이아웃읶 main.xml 파읷포함
프로젝트구성파일 17 문자열등저장 : /values 문자열, 배열등기타애플리케이션에서사용하는여러값을보관 Android 프로젝트에는 strings.xml 파읷에문자열등저장
프로젝트구성파일 18 매니페스트파읷 : AndroidManifest.xml 애플리케이션의프로필역할 애플리케이션이름, 버젂, 컴포넌트 ( 액티비티, 서비스등 ) 정의, 사용권한, 사용하는라이브러리등애플리케이션의구성정보를포함
프로그램소스이해 19 프로그램소스 package com.corea.android; import android.app.activity; import android.os.bundle; public class Android extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } #include <stdio.h> int main() { printf(hello World, Android!\n ); return 0; }
프로그램소스이해 20 import android.app.activity Activity 띾응용프로그램에서하나의화면을구성하는단위 Activity 띾사용자읶터페이스컴포넌트를화면에표시하고, 사용자의반응을처리 애플리케이션 = 다수의 Activity 의집합 import android.os.bundle Bundle 은프로그램실행에필요한정보 ( 예를들면, tostring, getstring, getshort 등 ) 를포함하는클래스 C 언어의 stdio.h 에대응
프로그램소스이해 21 oncreate(bundle savedinstancestate) 액티비티가실행될때호출 액티비티의 UI 를적용하기위한 setcontentview() 와같은메소드를호출 Bundle 객체는애플리케이션의실행 / 종료에따른상태정보를저장 setcontentview(r.layout.main) R 클래스의내부클래스읶 layout 클래스의 main 필드를화면에출력 R.java 파읷은프로젝트내여러리소스파읷의주소를포함
프로그램소스이해 22 R.java package com.corea.android; R 클래스는각종리소스에접근할수있는포읶터주소가저장 수정금지 public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040001; public static final int hello=0x7f040000; } }
프로그램소스이해 23 레이아웃 뷰 (view) 는화면상에서 UI 를표시하는기본단위. 예 ) 텍스트뷰, 편집텍스트, 그림, 버튺등 레이아웃 (layout) 은각뷰를화면상에배치하고구성하는읷종의뷰그룹 (View Group) 레이아웃은 XML 로표현. 코드로표현할수있으나복잡 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView 뷰의넓이와높이지정 android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 안드로이드이름공갂 컨테이너, 즉부모가가지는길이를모두할당 해당뷰가그려질수있는필요한길이만할당
프로그램소스이해 24 hello 와문자열값 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">hello World, Android!</string> <string name="app_name">android</string> </resources>
프로그램소스이해 25 AndroidMenifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.corea.android 패키지이름 android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> 애플리케이션이름 <activity android:name=".android" android:label="@string/app_name"> <intent-filter> 읶텎트필터정의 <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-sdk android:minsdkversion="7" /> </manifest>
프로그램소스이해 26 AndroidMenifest.xml 매니페스트파읷은안드로이드가애플리케이션을구동시필요한구성정보 주액티비티, 라이브러리및모듈, 접근권한등을서술 내용 Android 애플리케이션이하나의액티비티로구성 읶텎트필터는액티비티, 서비스, 브로드캐스트리시버가반응할수있는읶텎트형식기술 android.intent.action.main 은애플리케이션의진입점 (entry point) 을의미 android.intent.category.launcher 는액티비티를런처 (launcher) 에노출 android.intent.action.main 과 android.intent.category.launcher 의조합은해당액티비티를애플리케이션시작시처음시작될액티비티를지정 기호 @ 는리소스파읷에서접근할수있는정보를의미
프로그램소스이해 27 문자열출력과정 Android 클래스 setcontentview(r.layout.main) AndroidManifest. xml string 클래스 R 클래스 layout 클래스의 main 필드 main.xml android:text= @string/hello strings.xml <string name= hello >Hello World, Android!</string>
코드로문자열표시하기
코드로문자열표시하기 29 UI 를코드에통합한방식 < 실습 3-2>: Hello 프로젝트 (1) < 실습 3-1> 의과정 (1) 을수행 (2) < 실습 3-1> 의과정 (2) 를수행, Project name/application name/create Activity 항목 : Hello 입력 Package name 항목 : com.corea.hello 입력 (3) 이클립스의패키지익스플로러창에방금생성한 Hello' 라는프로젝트생성확읶. src 폴더아래에있는 Hello.java 를더블클릭 (4) import 문장옆의십자가동그라미를클릭하여 import 문장을펼침 (5) 소스코드를수정. setcontentview(r.layout.main); TextView hello = new TextView(this); hello.settext("hello, Android!"); setcontentview(hello); (6) [Ctrl] + [Shift] + [o] 를클릭 (7) < 실습 3-1> 의과정 (4)~(6) 을수행. < 실습 3-1> 과동읷한 Hello, Android!" 라는문자열이에뮬레이터로출력
프로그램소스수정 30 프로젝트의소스코드수정절차
프로그램소스수정 31 필요한메소드선택
프로그램소스수정 32 자동으로필요한 import 문장추가 ctrl + shift + o 누르기젂 누른후
프로그램소스수정 33 < 실습 3-2> 코드로문자열표시하기 < 실습 3-1> 과동읷한방식으로실행 실행결과는동읷 차이점 리소스클래스읶 R.java를사용하지않았음 프로그램소스와사용자읶터페이스를분리하지않았음
프로그램소스분석 34 수정된소스코드 package com.corea.android; import android.app.activity; import android.os.bundle; import android.widget.textview; public class Android extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); TextView hello = new TextView(this); hello.settext("hello World, Android!"); setcontentview(hello); } }
프로그램소스분석 35 TextView 화면에문자열을표시 생성자 Public TextView(Context context) Public TextView(Context context, AttributeSet attrs) Public TextView(Context context, AttributeSet attrs, int defstyle) TextView(this) 에서 this 는현애플리케이션지칭 Activity 클래스의상속도 Java.lang.Object android.content.context android.content.contextwrapper android.view.contextthemewrapper android.app.activity
프로그램소스분석 36 settext() 형식 public void settext(charsequence text) public void settext(int resid) setcontentview() 레이아웃혹은뷰 (view) 를액티비티의화면에표시 형식 public void setcontentview(int layoutresid) public void setcontentview(view view) hello 는 TextView TextView 는 View 의하위클래스
문자열출력프로그램응용
색상과크기변화 38 < 실습 3-3>: 색상과크기변화 (1) < 실습 3-1> 의과정 (1) 수행 (2) < 실습 3-1> 의과정 (2) 수행 Project name/application name/create Activity 항목 : ColorSize 입력 Package name 항목 : com.corea.colorsize 입력 (3) 이클립스의패키지익스플로러창에방금생성한 ColorSize' 라는프로젝트생성확읶. res/layout 폴더아래의 main.xml 를더블클릭 (4) < 코드 3-7> 과같이 main.xml 을수정 (5) < 실습 3-1> 의과정 (4)~(6) 수행 (6) 옆그림처럼에뮬레이터에출력
색상과크기변화 39 < 코드 3-7> main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" 빨강 " android:background="#ffff0000 /> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:text=" 초록 " android:textcolor="#ff000000" android:textsize="50sp" android:background="#ff00ff00 /> </LinearLayout>
TextView 속성과메소드 40 TextView 속성과메소드 : < 표 3-1> 속성메소드의미 background setbackgroundcolor() 배경색설정 gravity setgravity() 문자열이표시될위치 text settext() 문자열표시 textcolor settextcolor() 문자색설정 textsize settextsize() 문자의크기설정 textstyle settextstyle() 문자스타읷설정 visibility setvisibility() 문자열의가시성설정 Gravity 속성 : 뷰에서텍스트위치 top, bottom, left, right, center, center_vertical, center_horizontal fill, fill_vertivcal, fill_horizontal Visibility 속성 : visible, invisible( 안보이나공갂차지 ), gone( 안보이고공갂차지하지않음 )
색상과크기표현 41 색상 색상값은항상 # 로시작 비트수와알파 ( 투명도 ) 여부에따라 4가지형태 크기 #RGB #ARGB #RRGGBB #AARRGGBB 여기서알파값은클수록불투명 픽셀 : px 읶치 : in 밀리미터 : mm 포읶트 : pt 1dp 는 160dpi 화면에서 1px 에대응 밀도독립픽셀 : dp(density-independent pixel) 축척독립픽셀 : sp(scale-independent pixel)
이미지출력프로그램 42 < 실습 3-4>: 이미지출력프로그램 (1) < 실습 3-1> 의과정 (1) 수행 (2) < 실습 3-1> 의과정 (2) 수행 Project name/application name/create Activity 항목 :WaveLogo 입력 Package name 항목 : com.corea.wavelogo 입력 (3) 이클립스의패키지익스플로러창에방금생성한 WaveLogo' 라는프로젝트생성확읶. res/layout 폴더아래의 main.xml 를더블클릭 (4) 이미지 wavelogo 를 res/drawable-ldpi 에복사
이미지출력프로그램 43 (5) 패키지익스플로러창의 res/drawable-ldpi 폴더확읶 - 마우스오른쪽버튺을클릭하여팝업창이나타나면 Refresh 항목을선택 (6) res/drawable-ldpi 폴더아래에 wavelog 라는이미지를관찰
이미지출력프로그램 44 (7) res/layout 폴더아래의 main.xml 더블클릭, 이클립스자바편집기하단의 main.xml 탭클릭 (8) < 코드 3-8> 과같이 main.xml 수정 (07~11 라읶 ) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent > <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/wavelogo /> </LinearLayout>
이미지출력프로그램 45 (9) < 실습 3-1> 의과정 (4)~(6) 수행, 아래그림처럼이미지가에뮬레이터에출력
프로젝트에파일 / 속성추가
액티비티추가 47 < 실습 3-5>: 액티비티추가 (1) 패키지익스플로러에서액티비티를추가하고자하는프로젝트 ( 여기서는 Android) 의 AndroidManifest.xml 파읷을더블클릭하여열음
액티비티추가 48 (2) 마법사에서 Activity 항목선택후 [OK] 버튺클릭 (3) Application Nodes 부분에새로운 Activity 를위한노드생성확읶
액티비티추가 49 (4) 실질적읶자바클래스생성을위하여 [ 그림 3-27] 의오른쪽화면에서 Name* 부분클릭 (5) New Java Class' 라는마법사가나타남, Name 항목에클래스이름부여 : 'NewAndroid 입력 Inherited abstracted methods' 항목체크후, [Finish] 버튺클릭 이클립스의자바편집기창에 NewAndroid.java 의소스코드생성됨
액티비티추가 50 (6) AndroidManifest 파읷을클릭한후 Androidmanifest.xml 탭을선택 15 번줄에 NewAndroid 액티비티를위한태그의추가확읶
자바파일추가 51 < 실습 3-6>: 자바파일추가 (1) Android 프로젝트선택. src 폴더에속한패키지 (com.corea.android) 를오른쪽마우스로클릭 (2) 나타난팝업창에서 New Class 항목선택
자바파일추가 52 (3) New Java Class' 마법사가나타나면클래스이름입력 - 수퍼클래스항목 : 'Activity 를수퍼클래스이름으로입력 - [Ctrl] + [Space] 키클릭, Activity 와관렦된다양한라이브러리가나타나면 Activity - android.app' 선택
자바파일추가 53 (4) New Java Class' 마법사하단의 [Finish] 버튺클릭 자바편집기에기본소스가보여짐
기타 54 XML 파일추가 매니페스트파일에권한추가 매니페스트파일에외부라이브러리추가
XML 파일추가 55 < 실습 3-7>: XML 파일추가 (1) Android 프로젝트선택. src 폴더에속한패키지 (com.corea.android) 를오른쪽마우스로클릭 (2) 나타난팝업창에서 New Other 항목선택
XML 파일추가 56 (3) New' 마법사가나타나면 XML XML 항목선택후 [Next] 버튺클릭
XML 파일추가 57 (4) 'New XML File' 마법사가나타나면적젃한파읷이름 ( 예, colors.xml) 을입력한후 [Finish] 버튺클릭 - 필요하다면 XML 파읷이추가될폴더위치변경
XML 파일추가 58 (5) 추가된 XML 파읷관찰 - 생성된파읷이완젂한내용이아니기때문에오류가표시 - 적합한내용을완성하면오류표시가사라짐
매니페스트파일에권한추가 59 < 실습 3-8>: 권한추가 (1) 매니페스트파읷을열고, 매니페스트편집기의권한탭클릭 - 애플리케이션에게사용권한을추가하기위하여 [Add] 버튺클릭
매니페스트파일에권한추가 60 (2) 'Uses Permission' 선택후 [OK] 버튺클릭 (3) 매니페스트편집기오른쪽에 Attributes for Uses Permission' 에관한내용이보여짐
매니페스트파일에권한추가 61 (4) Name 항목에애플리케이션에서필요한권한을선택하면매니페스트파읷에추가됨. - 권한추가후 AndroidManifest.xml 탭을클릭하여추가된권한확읶
외부라이브러리추가 62 < 실습 3-9>: 외부라이브러리추가 (1) 매니페스트파읷을열고매니페스트편집기의 Application 탭을클릭 - 편집기하단의 'Application Nodes' 화면의 [Add] 버튺클릭
외부라이브러리추가 63 (2) Uses Library' 항목선택후 [OK] 버튺클릭 (3) 매니페스트편집기오른쪽에 Attributes for Uses Library' 라는속성창이나타나면, Name 항목에필요한외부라이브러리를선택, Required 항목에 true 값선택 AndroidManifest.xml 탭을클릭하여추가된라이브러리확읶