오늘은 Notepadv1를 만들겁니다.
근데 좀 어렵게 만들어 보고자 합니다. 예제에는 Create project from existing source를 이용하여 쉽게 만들었는데, 우린 이렇게 쉽게 공부하면 안됩니다. 우리의 목표는 HelloAndroid처럼 아무것도 없는데서 시작해서 Notepadv1Solution과 똑같이 만드는 것입니다. 우리의 Notepad 이름은 myNotepadv1으로 합니다.
.
그럼 시작!
.
그럼 시작!
1. 프로젝트만들기:
eclipse에서 > File > New > Android project 갑니다.
eclipse에서 > File > New > Android project 갑니다.
다음 내용을 넣습니다.
Project name: myNotepadv1 - 이 이름으로 폴더생김
Contents: Create new project in workspace
X Use default location
Properties:
package name: com.android.demo.mynotepad1 - Java package이름이 예제에서는 com.android.demo.notepad1 이나 우린 딴길로감.
Activity name: myNotepadv1- 아주 중요한 컨셉. 안드로이드 Actrivity class의 subclass가 됨.
Application name: my Notepad - 그냥이름.
Project name: myNotepadv1 - 이 이름으로 폴더생김
Contents: Create new project in workspace
X Use default location
Properties:
package name: com.android.demo.mynotepad1 - Java package이름이 예제에서는 com.android.demo.notepad1 이나 우린 딴길로감.
Activity name: myNotepadv1- 아주 중요한 컨셉. 안드로이드 Actrivity class의 subclass가 됨.
Application name: my Notepad - 그냥이름.
그럼 왼편에 Package가 만들어 진것이 보입니다. 이름만 다르지 HelloAndroid만들때와 별차이는 없습니다.
.
2. 레이아웃 만들기: notepad_list.xml
Tutorial에 보면 레이아웃은 Activity의 얼굴이라 나와있습니다.
.
2. 레이아웃 만들기: notepad_list.xml
Tutorial에 보면 레이아웃은 Activity의 얼굴이라 나와있습니다.
이제 notepad_list.xml을 만듦니다.
eclipse에서 > File > New > File 로가서
Parent path 로 myNotepadv1/res/layout를 선택하고,
File name에 notepad_list.xml 을 넣습니다.
그리고 [Finish] 합니다.
Parent path 로 myNotepadv1/res/layout를 선택하고,
File name에 notepad_list.xml 을 넣습니다.
그리고 [Finish] 합니다.
새로 만들어진 파일속에 다음과 같이 type합니다.
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@id/android:list" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/no_notes"/></LinearLayout>
이것은 Full screen layout 인데 이밖에도 alert 같이 Floating screen layout도 가능합니다.
또, 아예 레이아웃이 없는 경우도 생각해 볼수있을 겁니다.
또, 아예 레이아웃이 없는 경우도 생각해 볼수있을 겁니다.
여기 아래와 같이 골뱅이,@ 가 세군데 있습니다. 이건 XML parser가 id나 text를 리소스에서 찾아내야한다 란 뜻입니다.
android:id="@id/android:list" android:id="@id/android:empty"text="@string/no_notes"
android:id 가 붙은건 Android platform에서 주어집니다. 이과정에서 ListAdapter라는 개념이 나오는데 이건 여기 ListView와 data 중간의 다리같은 역할자라 보면됩니다 . list는 노트리스트가 있을때 사용되는것이고 empty는 노트리스트가 없을때 쓰이는겁니다.
text가 붙은건 res/values/strings.xml에 또 뭔가가 있습니다. 나중에 보겠지만 아무 노트도 없을때 "No Notes Yet" 으로 화면에 나가는게 이겁니다.
화면에는 한번에 하나밖에 못나갑니다. 모 아니면 도, ListView나 TextView둘중에 하나만 보여진다는 겁니다.
.
2. 레이아웃 만들기: notes_row.xml
.
2. 레이아웃 만들기: notes_row.xml
화면 하나 더 만듭니다. 이번 거는 노트 리스트의 각 줄에 해당하는 겁니다.
eclipse에서 > File > New > File 로가서
Parent path 로 myNotepadv1/res/layout를 선택하고,
File name에 notes_row.xml 을 넣습니다.
그리고 [Finish] 합니다.
.
새로 만들어진 파일속에 다음과 같이 type합니다.
Parent path 로 myNotepadv1/res/layout를 선택하고,
File name에 notes_row.xml 을 넣습니다.
그리고 [Finish] 합니다.
.
새로 만들어진 파일속에 다음과 같이 type합니다.
<?xml version="1.0" encoding="utf-8"?><TextView android:id="@+id/text1" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
골뱅이가 또 나옵니다. 이번엔 +까지 붙어서 나오는데 이건 진짜 헷갈립니다. 패스합니다. 하지만 중요하니까 담에 또 공부할겁니다.
.
3. 자바 클라스 만들기: myNotepadv1.java
.
3. 자바 클라스 만들기: myNotepadv1.java
src/com.android.demo.mynotepad1 로 가서 myNotepadv1.java를 열어 봅니다.
아무것도 집어넣은게 없으니 HelloAndroid 만들때 보았던 거랑 같습니다.
Notepadv1Solution의 Notepadv1.java와 똑 같이 type 하는데 package 이름은 myNotepadv1으로 바꿔주는거 잊지 말아야 합니다.
* 윗쪽에 public class myNotepadv1 extends Activity ... 에서 Activity를 ListActivity 로 바꾸는거 중요합니다. 저번에 언급했는데 기억나시는지, "eclipse에서는 Ctrl+Shift+O를 이용 import를 다시 정리할수 있음" 이라고 했습니다. 이 HotKey를 눌러주면서 import관련 Warning 이나 Error없앱니다.
* 이 class 파일에 대해서는 저번에 많이 훝어보았습니다. (1)onCreate, (2)onCreateOptionsMenu, (3)onOptionsItemSelected 이 뭔지 이미 다 알고있어야 합니다.
* menu.add(0, INSERT_ID, 0, R.string.menu_insert); 를 신경써서 봅니다. 각 변수가 의미하는 것은 다음과 같습니다.
1. a group identifier for this menu (none, in this case),
2. a unique ID (defined above),
3. the order of the item (zero indicates no preference),
4. the resource of the string to use for the item.
2. a unique ID (defined above),
3. the order of the item (zero indicates no preference),
4. the resource of the string to use for the item.
너무 그대로 하면 재미없으니까 응용한번 해봅니다.
만약 위의 INSERT_ID 선언부와 menu.add부분에 다음과 같이 추가를 해보면 어떻게 되나요.
만약 위의 INSERT_ID 선언부와 menu.add부분에 다음과 같이 추가를 해보면 어떻게 되나요.
private static final int INSERT_ID = Menu.FIRST; // 기본에 있던부분
private static final int HAPPY1_ID = Menu.FIRST + 1; //테스트를 위한 추가 부분
private static final int HAPPY2_ID = Menu.FIRST + 2; //테스트를 위한 추가 부분
private static final int HAPPY1_ID = Menu.FIRST + 1; //테스트를 위한 추가 부분
private static final int HAPPY2_ID = Menu.FIRST + 2; //테스트를 위한 추가 부분
menu.add(0, INSERT_ID, 0, R.string.menu_insert); // 기본에 있던부분
menu.add(0, HAPPY1_ID, 0, R.string.menu_happy1); //테스트를 위한 추가 부분
menu.add(0, HAPPY2_ID, 0, R.string.menu_happy2); //테스트를 위한 추가 부분
menu.add(0, HAPPY1_ID, 0, R.string.menu_happy1); //테스트를 위한 추가 부분
menu.add(0, HAPPY2_ID, 0, R.string.menu_happy2); //테스트를 위한 추가 부분
아래 두줄은 res/values.xml에 추가되어야 합니다.
<STRING name="menu_insert">Add Item</STRING> // 기본에 있던부분
<STRING name="menu_happy1">Happy1</STRING> //테스트를 위한 추가 부분
<STRING name="menu_happy2">Happy2</STRING> //테스트를 위한 추가 부분
<STRING name="menu_insert">Add Item</STRING> // 기본에 있던부분
<STRING name="menu_happy1">Happy1</STRING> //테스트를 위한 추가 부분
<STRING name="menu_happy2">Happy2</STRING> //테스트를 위한 추가 부분
이렇게 하면 나중에 메뉴를 누르때 두개의 더미 옵션이 더 나올겁니다.
.
3. 자바 클라스 만들기: NotesDbAdapter.java
.
3. 자바 클라스 만들기: NotesDbAdapter.java
eclipse에서 > File > New > Class 로가서
Source folder: myNotepadv1/src
Package: com.android.demo.mynotepad1
Name: NotesDbAdapter
Modifier: public
Super class: 있던것 그대로 써도됨
옵션 체크되어있는것 다 없앰.
Package: com.android.demo.mynotepad1
Name: NotesDbAdapter
Modifier: public
Super class: 있던것 그대로 써도됨
옵션 체크되어있는것 다 없앰.
Notepadv1Solution의 NotesDbAdapter.java와 같이 type합니다.
이제 리뷰해봅니다.
건들어야 할 파일이
src쪽에는
myNotepadv1 - 화면과 이야기하는 모듈입니다.
NotesDbAdapter - 데이터베이스와 이야기하는 모듈입니다.
myNotepadv1 - 화면과 이야기하는 모듈입니다.
NotesDbAdapter - 데이터베이스와 이야기하는 모듈입니다.
res쪽에서 layout에
notepad_list.xml - 화면전체 모양입니다.
notes_row.xml - 각 row의 모양입니다.
notepad_list.xml - 화면전체 모양입니다.
notes_row.xml - 각 row의 모양입니다.
res쪽에서 values에
strings.xml - 말 그대로 화면에 뜨는 value가 들어갔습니다.
strings.xml - 말 그대로 화면에 뜨는 value가 들어갔습니다.
R.java는 건들필요없습니다. 다 자동으로 알아서 수정됩니다.
다 끝났으면 eclipse로가서 왼편 Package explorer에서 myNotepadv1 package를 클릭한후 오른쪽 마우스버튼 누릅니다.
Run As > Android Application을 선택하면 Simulator가 뜨면서 실행됩니다. 멋집니다.
실제 아무것도 없는데서 시작해서 Project를 만들다보면 기존에 있는 것을 기반으로 만드는 것보다 에러가 더 많습니다. 하지만 그것도 공부입니다. Notepadv1Solution과 잘 비교해보면 틀림없이 끝낼수있습니다.
댓글 없음:
댓글 쓰기