Skip to main content

3 posts tagged with "안드로이드"

View All Tags

· 6 min read

Android 연구회 과제로 notepad에 몇 가지 기능 추가하기로 했었는데, 내가 맡은 부분은 완료했다. 입력된 메모를 email로 전송하는 간단한 기능인데 책도 보고 여기저기 뒤지면서 android 에서 제공하는 기본적이고 중요한 내용은 어느 정도 익힐 수 있었다. 사실 제공되는 notepad sample 자체가 가지는 몇가지 문제점 때문에 그것부터 개선한 후에 가려고 했으나(예전에 포스팅 했던), 내 능력의 미숙함과 더불어 게으름 때문에 신규 기능만 추가하는 선에서 마무리 하기로 했다.

1. User account

내가 참조했던 어떤 블로그에서 android 가 아직 자체적으로 email 관련 라이브러리를 제공하지 않는다고 봤는데, 예전 버전에서 안되었던건지 그래서 현재는 제공되는 것인지는 확인을 해봐야 하지만 일단 해당 라이브러리를 import 해서 사용했고 덕분에 Gmail 계정 사용자만 이용 가능한 상태. 어쨌든 공부의 목적으로 시작한거니 문제없는 기능구현이 우선이었다. User account 를 입력할 수 있는 activity 를 별도로 구현했으며 sample 의 NoteList activity 에서 intent로 넘겨받은 계정 정보를 처리. SharedPreferences 로 한 번 입력한 내용은 activity 나 application 이 종료되더라도 계정정보를 다시 입력하는 일이 없도록 작성했다.

2. Recipients

User account 정보를 입력한 이후에는 수신인 email 주소를 입력하는 activity를 실행하게 되는데, 필수 항목이므로 한글자도 입력하지 않으면 OK 버튼을 비활성화 상태로 두어 진행 불가능하게 구현했다. (User account 도 마찬가지) 여기까지 필요한 정보를 입력하고 OK 버튼을 누르면 이메일이 전송된다.

3. 결론

Notepad sample의 소스를 들여다보면 application 작성에 필요한 거의 대부분의 내용을 담고 있다는 걸 알 수 있다. Activity 간 data를 주고받는 Intent 의 사용은 물론이고, database, ContentProvider 를 모두 사용해서 구현되어 있기 때문에 이런 필수적인 API 들의 사용방법을 익히기에 딱 적당한 내용인 듯 하다. 추가로 배운 내용들은 아래에 간단히 요약.

Popup dialog

popup 형태의 activity 를 만들기 위한 방법은 여러가지가 있을 수 있는데 가장 간단한 방법은 일단 popup 형태로 만들고자 하는 activity 를 일반적인 activity 처럼 구현한 이후에 AndroidManifest.xml 파일의 해당 activity의 속성에 아래의 항목을 추가하면 끝.

android:theme="@android:style/Theme.Dialog"

Activity 는 호출순서의 가장 마지막에서 시작할 수 있도록 작성할 것.

sample 이 제공하는 것 이외에 별도로 작성한 activity 가 두 개인데 (User account와 recipient 정보 입력하는), 시나리오상 두 개가 연속으로 불려야 할 때도 있고, 따로 불려야 하는 경우도 있다. 두 개의 activity가 연속으로 시작해야 하는 경우 (User account 입력 후 바로 수신인 메일 주소를 입력하는 시나리오)를 위해 처음엔 startActivityForResult 를 연속으로 호출하게 작성했었다. 내 생각엔 하나의 activity 가 활성화되면 입력이 끝나야 main activity 로 넘어가서 다시 두 번째 activity 가 시작될거라고 생각했기 때문이었는데, 실제로 구현해보니 main activity는 두 개의 activity 를 모두 호출하고 그 아래에 있던 디버깅용 구문들까지 모두 순서대로 호출해버리는 사태가 발생했다. 이리저리 머리를 굴려서 적당히 분리해 문제가 없도록 개선은 했는데, 이런 경험하면서 가능한 startActivity나 startActivityForResult 호출한 이후엔 다른 메소드가 호출되는 일이 없도록 작성하는게 좋겠다는 생각을 하게 되었음.

Hint / Toast

EditText 에 data 를 입력하지 않은 상태에서 예시를 보여주는 hint 의 사용법과 Activity 에 짧은 메세지를 보여주기에 적당한 Toast 의 존재를 알았다. 그 중 Toast 는 간단히 구현결과 확인하는데도 아주 좋음.

· 4 min read

내가 가진 책이 너무나 좋은 관계로 책 전반을 구글 혹은 출판사에서 제공하는 샘플을 사용해 설명하고 있지만 해당 샘플을 어떻게 import 하는지에 대한 설명이 없다. IDE를 이클립스로 사용하고 있기 떄문에 제공되는 샘플에 프로젝트 파일만 들어있다면 클릭 몇 번으로 import는 마칠 수 있지만 유감스럽게도 구글에서 제공하는 샘플에는 프로젝트 파일이 들어있지 않다. .classpath도 물론 없다. 프로젝트 생성에 관련된 파일들만 제외하고 샘플 자체에 대한 파일들만 들어있는 셈이다. 처음엔 프로젝트를 새로 만들면서 manifest 파일이나 각종 소스파일과 리소스들을 그냥 복사, 붙여넣기 등을 통해서 해결하려고 해봤는데 그나마 건드려야 하는게 너무 많아서 짜증을 내고 있던 찰나에 이런 생각에 이르게 되었다. '구글에서 과연 이렇게 하라고 해둔걸까?' 역시 그렇지 않다. 제대로 꼼꼼하게 살펴보지 않아서 삽질만 한 셈. 구글에서 제공하는 샘플들을 사용하는 방법은 아래와 같다.

1. 프로젝트 생성

기본적으로 프로젝트 생성을 해보면 위와 같은 pop-up 을 만날 수 있다. 여기서 default로 설정된 항목들을 그대로 두고 필수항목인 프로젝트 이름이나 activity name 등을 채운 후에 Next를 해버리면, 나와 같은 삽질을 해야만 한다. 그래서 천천히 살펴보면 이런 걸 볼 수 있다. Create project from existing sample.

2. Sample 추가

Create project from existing sample 을 선택하면, 바로 위에 선택되어 있던 라디오버튼 항목들은 비활성화가 되고, Build Target 까지 적당히 원하는걸로 선택해주면 해당 platform 아래에 있는 sample 들을 선택할 수 있게 되어있다. (실제로 platform 별로 sample 디렉토리가 별도로 존재한다.) 그래서 맘에 드는 sample 을 골라주기만 하면 끝. 물론 프로젝트 이름 등의 필수항목들은 본인이 직접 채워줘야...

· 4 min read

회사 업무 이외에 연구회 활동을 하고 있다. 다뤄본 사람이 조금 있어서 진입장벽이 나름 낮았던 WM은 이후 프로젝트에 별로 유용하지 않을 듯 하여 안드로이드로 옮겨타게 되어서 짬짬이 준비하고 있다. 덕분에 iphone 에 대한 공부는 좀 더 미뤄질 예정. 시간관계상 갑작스럽게 새로운 무언가를 만들기는 힘들듯 해서 제공되는 sample 중 하나인 notepad 를 응용하기로 했는데, 이리저리 돌려보니 notepad sample 자체의 기능이 조금 부족한 감이 없지 않아 개선작업부터 먼저 할 생각을 하게 되었다. 간단히 메뉴나 작은 기능만 추가하면서 익힐 예정. 아래는 기본 기능에서 개선이 필요한 부분들.

1. 메모 저장 기능

notepad 실행 후 menu 버튼을 눌러 새 메모를 추가하게 되면 간단히 글 입력이 가능하지만, 별도의 저장버튼이 존재하지 않는다. 단지 글 입력 후 되돌아가기 버튼을 누르면 저장이 되는 형태. 별도의 저장 기능이 있는 것 보다 편할 수도 있지만 사람 헷갈린다. 그러므로 저장 메뉴가 필요함. (Delete는 있는데 왜 Save는 없는걸까?)

2. Title과 본문 분리

저장 아닌 저장을 마치고 note list로 빠져나가서 확인해보면 처음에 입력했던 모든 내용이 title로 등록되어 있다. 물론 별도로 title을 수정하면 title만 변경되고 실제 내용엔 변화가 없다. 이걸 보면 입력한 내용과 동일한 data를 title에도 복사하고 저장은 별도로 하고 있음을 유추해 볼 수 있다. 개선이 필요하다. 새 메모 입력시 Title과 본문을 분리해 두어야 하고, 본문 입력시 제한적인 화면크기를 생각해서 title은 숨겨야 한다. 물론 저장시 숨겨두었던 title은 다시 꺼내서 보여주어야 함.

3. Menu list에서의 Delete 기능

Note list에서 메모 하나를 선택 후 메뉴 버튼을 눌러보면 Add Note, Edit Note, Edit Title 세 가지의 메뉴만 나타난다. 물론 메모를 선택해 롱키를 누르면 context menu에 Delete가 보이지만 별도의 메뉴로 존재해야 한다. Edit이 있는데 Delete가 없다는건 말이 안되니까.