Android2009. 12. 29. 19:20

  Day1에서 공부한 내용에 파일 입출력만 추가시켜주면 될 줄 알았는데 어제 공부한거 다 까먹었다. ㅜㅠ
파일 입출력에 관한 내용만 공부하려다 어제 공부한거 복습도 할겸 해서 생각한 테스트 어플이 메모장이였는데 정말 간단히 만들자 생각해서 간단할 줄 알았는데 힘들다 힘들어 ㅜㅠ;; 간단한 것도 이렇게 힘들줄이야~

구현 내용
  1. 메뉴 구성
    - 타이틀 제목/New/Open/Exit 로 구성
  2. New 버튼
    - 메모입력창을 띄운다.
    - 텍스트입력창 (상단) : 메모의 내용을 입력받는다.
    - 텍스트입력창 (하단) : 한줄로 메모의 내용을 저장시킬 파일 이름을 입력 받는다.
    - 버튼 (SAVE) : 바로 저장해 버린다.
    - 버튼 (MENU) : 초기 메뉴로 나가버린다.
  3. Open 버튼 - 아직 미구현
    - 저장되어 있는 파일들을 보여준다.
    - 사용자가 파일을 선택하면 스크롤 뷰 레이아웃을 이용해 내용을 보여주기만 한다.
    - 버튼 (EDIT) : 읽고있는 내용을 메모입력창으로 보내 사용자가 편집할 수 있게 한다.
    - 버튼 (MENU) : 초기 메뉴로 나가버린다.
  4. Exit 버튼
    - 어플 종료

구현 결과


초기 메뉴 구성
  • LinearLayout을 사용해서 간단하게 구현.
    - 별거 없다 ㅡ.,ㅡ;;

















NEW버튼 클릭시 메모 입력창 구현
  • RelativeLayout을 사용해 하단 버튼 부분부터 시작해 android:layout_above를 이용해 차례대로 구현.
    메모 내용을 입력받을 EditText창은 가로, 세로 fill_parent로 채우고 android:layout_above와 android:layout_below를 이용해 나머지 부분
    을 모두 사용 할 수 있도록 정렬 시킴.
  • 내용 입력 EditText에 android:scrollbars="vertical" 를 추가시켜 내용이
    많으면 자동으로 스크롤바가 생기게 한다.
  • 메시지만 보여주는 액티비티를 만들어 에러사항이나 경과를 사용자에게
    알려준다.
    - SAVE버튼을 눌렀을때 경우의 수
      (경우1) 파일이름 정해주는 공간이 비어있다
      (경우2) 지정한 파일 이름이 이미 존재 한다.
      (경우3) 아무 문제없이 저장 완료








SAVE버튼을 눌렀을 때의
메세지 출력
- 하나의 액티비티에서 각기 다른 메세지를 출력 할 수 있게한다.


- 아무 이상이 없을 경우 파일을 저장한 후 OK버튼을 누르면 모든 상황을 종료하고 초기 메뉴로 나간다.







- 파일 이름을 입력 받는 곳이 비어있을때.








- 저장할 파일 이름이 이미 있을때.
  







 
일반 윈도우 메모장을 사용해 저외의 경우의 수도 생각하여 추가로 만드는것도 공부에 도움이 될듯하다. 저장을 완료하고 초기 메뉴로 넘어가지 말고 저장된 내용을 스크롤 뷰를 통해 보여준다던지 저장할 파일 이름이 이미 있을땐 덮어씌울건지 물어본다던지 등등등. 
다! 걍 넘어가야 겠다. ㅋㅋㅋ
( 걍 파일 입출력만 테스트 해보고 넘어갈걸 그랬나 ㅜㅠ )



파일 입출력 - 저장 부분 주요 메소드
        try {
            EditText et = (EditText)findViewById(R.id.et_edit);
            byte[] buffer = stringToByte(et.getText().toString());                 
            FileOutputStream fos = openFileOutput(sName, Context.MODE_PRIVATE);
            fos.write(buffer);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Intent intent = new Intent(Edit.this, Message.class);
        intent.putExtra("WARNING", SAVE_COMPLETE);
        startActivityForResult(intent, 0);
    }

 아직 파일을 열어보기까지는 구현을 못시켜서 저장된 파일을 직접 확인해 보려고 하드디스크를 열심히 찾아봤지만 없었다. 직접 찾지는 못하고 file.getPath()로 확인해보니 저장되어 있는 곳이
/data/data/<package name>/app_(filename).txt 였다. apk파일도 풀어보고 이곳저곳 다 찾아봤지만 안드로이드 에뮬레이터가 보안을 위해 꼭꼭 숨겨논거라 판단하고 넘어갔다. ^___^
 위 코드에서 byte배열인 buffer에 string값을 byte로 변환한걸 다시 byteToString 메소드를 이용해 확인해보니 저
장된 값은 문제 없었다.







 만들면서 발견한 문제들


1.
EditText 입력창에 글자를 치려고만 하면 하단부분에 키보드가 나와버려 레이아웃에 구현한 화면 자체들이 모두 올라가 버려 화면처럼 수정중인 글자를 확인 할 수가 없게 된다. ㅜㅠ;;

2. 처음 EditText 입력시에 화면의 세로 사이즈의 중앙에 커서가 위치해 있다.

3. 메세지 출력창(저장완료버튼)에서 OK버튼을 누르면 finish()를 통해 액티비티들을 모두 종료시킬 수 있었지만 에뮬레이터의 
(이전)버튼도 보여주는 창을 닫는기능때문에 버튼에 대한 정의를 내려줘야 하는데 리스너를 찾지 못해 이전 버튼을 누르면 finish()가 안되고 오류를 뿜어 버린다.


















소스 보관

Posted by ™설야
Android2009. 12. 28. 21:19


  새로운 Activity를 보여주거나 서로 연계되어 값을 보내고 받기 테스트.

구현 내용
 1. Activity 는 3개를 만든다. (입력 Activity, 출력 Activity, Help Activity)
 2. 입력 Activity는 사용자로 하여금 이름을 입력받게 한다.
 3. OK버튼을 누르면 출력 Activity로 전환되면서 사용자가 입력한 메세지를 출력하고 OK버튼을 누르면 그 값을 입력 Activity에 뿌려주고 Cencel을 누르면 아무변경없이 그냥 입력 Activity로 이동한다.
 4. 입력, 출력 Activity에 Help버튼을 만들어주고 눌렀을때 Help Activity로 특정값을 보여주게 한다.
 5. Help Activity에서는 Go Back버튼을 만들어 눌러주게 되면 Help버튼을 눌렀을때의 Activity로 이동한다.


구현 결과

사용자 이름을 입력받는 창

- RelativeLayout 사용


















입력받은 내용 확인 시켜주기

- LinearLayout 두개 사용.
첫번째 LinearLayout은 차례대로 TextView 두개를 Vertical 형식으로
뿌려주고 하단부분 새로운 LinearLayout을 사용해 Horizontal 형식으로
뿌려주기
- android:theme 사용
AndroidManifest.xml 에 추가된 Activity의 값에
android:theme="@android:style/Theme.Light 넣어주기
재미난 효과를 기대했는데 단지 배경화면을 하얗게 바꿔준다. -_-;;
이러면 해당 xml의 레이아웃에 background를 흰색으로 바꿔주는거랑
뭐가 틀린건지;;;









확인된 이름을 입력 Activity에 뿌려주기

 EditText창에 첫 화면에서 이름값을 입력한 값이 남아 있길래.
edit.setText("");
로 초기화 시켜줌
















Help버튼을 눌렀을때 새로운 Activity로 임의의 값 보여주기

- android:theme 사용
AndroidManifest.xml 에 추가된 Activity의 값에
android:theme="@android:style/Theme.Dialog 넣어주기
오~ 이건 좀 새로운 효과를 보여준다.
단,  android:layout_width가 고정값이 아니면 창이 이상하게 표현된다.














android:theme 관련 API
http://developer.android.com/reference/android/R.style.html

 3개의 activity를 사용한것 뿐인데 익숙하지 않은 id참조와 각 activity간에 연결이 쉽게만 느껴지지 않는다. xml의 id값들도 다 변수로 취급해야하는데 변수값 지정에도 신경써야 할 것 같다.


소스보관

Posted by ™설야
Android2009. 12. 28. 16:36

Day 1


 LinearLayout 은 수평이나 수직 순서대로 찍어준다는걸 대략 알고 넘어가고 RelativeLayout을 통한 테스트를 해보았다.


위 화면에 적용한 layout 관련 코드
android:layout_below="@id:target"
- target 보다 아래에 위치 하게 된다.( 위 화면에서 Button2 에 적용)
android:layout_above="@id:target"
- target 보다 위에 위치 하게 된다.(위 화면에서 Button1 에 적용)
android:layout_centerVertical="true"
- 화면상 세로 중앙에 위치
android:layout_centerHorizontal="true"
- 화면상 가로 중앙에 위치
android:layout_centerInParent="true"
- 화면 중앙에 위치(layout_centerVertical, layout_centerHorizontal 두개를 모두 적용시킨것과 동일한 효과)
android:layout_alignParentLeft="true"
- 화면 좌측에 정렬.(위 화면에서 aParentLeft 버튼에 적용)
android:layout_alignParentRight="true"
- 화면 우측에 정렬.(위 화면에서 aParentRight 버튼에 적용)
android:layout_alignParentBottom="true"
- 화면상 하단부에 표시(위 화면에서 android:layout_centerHorizontal="true"을 적용시켜 Reset 버튼에 적용)
android:layout_alignRight="@id:target"
- target을 우측 안쪽으로 정렬시켜 표시.(위 화면에서 aRight 버튼에 적용)
android:layout_alignLeft="@id:target"
- target을 좌측 안쪽으로 정렬시켜 표시.(위 화면에서 aLeft 버튼에 적용)
android:layout_toLeftOf="@id:target"

- target을 좌측 바깥쪽으로 정렬.(위 화면에서 toLeftOf버튼에 적용)
android:layout_toRightOf="@id:target"
- target을 우측 바깥쪽으로 정렬.(위 화면에서 toRightOf버튼에 적용)

  하~ Java만 알면 무난히 할 수 있을거라 생각했는데 처음 접해보는 XML때문에 난이도가 급상승. ㅜㅠ
 직접 코드들을 테스트하며 공부 중인데 테스트할 코드들이 수없이 많다. 분명 어플 제작할때 사용할것은 일부일테고 이클립스 자동완성 기능을 이용하면 되니 적용시켜 테스트 후 블로그에 작성하며 복습한 후 후딱 후딱 넘겨야겠다.




Posted by ™설야
Android2009. 12. 23. 07:09


i1)안드로이드 에뮬레이터

 안드로이드 어플을 개발해 보고자 책을 사서 하라는데로 개발 준비를 위해 이것저것 설치해 보았지만 역시 쉽지않았다. 구글링을 통해서 안드로이드 포럼(http://androidforums.com/) 이란 곳을 발견하고 가입하고 안되는 것에 대해서 되지도 않는 영어를 조금씩 번역해가며 우여곡절 끝에 개발 준비 완료.
 예전 이클립스를 가지고 WTK(Sun Java Wireless Toolkit)를 설치 실행해보았는데 에뮬레이터 실행까지 매우 비슷한것 같다. 소스작성과 컴파일, 에뮬레이터 실행을 이클립스에서 한방에 그것도 쉽게 해결 수 있다는거에 대만족이다.

안드로이드 개발은 어떨지 아주그냥 흥미진진해 진다.

i2)모든 개발의 시작 Hello World 찍어보기

Posted by ™설야