'안드로이드'에 해당되는 글 3건

  1. 2009.08.15 초보는 모를 수도 있는 자투리 팁 (2)
  2. 2009.08.15 Android Sudoku #2. 게임설명 추가하기:버튼 구현, 새 액티비티와 레이아웃 추가
  3. 2009.08.14 Android Sudoku #1. 기본적인 메뉴구성

초보는 모를 수도 있는 자투리 팁

|
나도 초보자지만 이제 곧 책펴들고 예제따라하려는 분들을 위한 팁 몇가지...

팁1. 에뮬레이터는 끄지 말고 계속 켜두기
예제 하나 할때마다 에뮬레이터 켰다 껐다 하는 사람이 많은데...사실 누가 미리 말 안해주면 그렇게 할 가능성이 높은게, 나같은 경우만해도 C, JAVA이런거 공부하면서 들여왔던 습관이 그것이라 안드로이드 시작할때도 똑같이 했는데, 영원처럼 느껴지는 에뮬레이터 구동속도때문에 속앓이 많이 했었다. 하지만... 에뮬레이터를 켜두고 프로젝트를 빌드시키면 에뮬레이터에 어플리케이션이 재설치가 되면서 작동이 된다. 고로, 에뮬레이터 한번 켜두면 그 기나긴 에뮬레이터 구동시간을 절약 할 수가 있게된다.

팁2. Life cycle of an Android activity
이것은 반드시 숙지해둬야할 내요이지 싶다. 각 상자들은 상태를 의미하고 화살표 주변의 함수이름들은 각 상태들이 전환되면서 호출되는 함수들을 보여준다. 

팁3. 이클립스 개발시 Log Cat을 살펴보자
코딩을 하다보면 에뮬레이터를 작동시켜보며 버튼이 잘 작동하나 안하나 확인하고플때가 있는데, 그렇다고 간단한 소스 변경해볼려고 디버그모드 전환해가며 브레이크 포인트설정하고 이러는게 상당히 번거롭다. 그럴때 도움이 될만한 팁이다.

1. 이클립스의 개발 시점(perpective)에 Log cat창을 하나 추가..
Window - Show View - Other - Android - Log cat한 뒤 콘솔창 옆에 추가가 된다.


2. 소스에 Log활용하기
여기선 어떤 클래스의 어떤 함수에서 어떠한 이벤트를 처리하는지 표시하는 로그 추가
Sudoku.java
private static final String TAG = "Sudoku"; //Sudoku.class를 위한 택
private static final boolean logFlag = true; //Log가 보고 싶지 않을땐 false,
....

@Override
public void onClick(View v) {
String method_tag = ".onClick();";
// TODO Auto-generated method stub
switch(v.getId()) {
case R.id.about_button :
if (logFlag) Log.d(TAG+method_tag, method_tag+"about_button is clicked");
Intent i = new Intent(this, About.class);
startActivity(i);
break;
case R.id.new_button :
if (logFlag) Log.d(TAG+method_tag, "new_button is clicked");
openNewGameDialog();
break;
case R.id.exit_button :
if (logFlag) Log.d(TAG+method_tag, "exit_button is clicked");
finish();
break;
// more buttons go here (if any)
}
}
이런식으로 적용 시키면 다음과 같은 메시지를 LogCat창에서 볼 수 있을 것이다.


개발중에는 logFlag에 true, false로 메시지를 조절하고 핸드폰에 올릴때는 해당 소스들을 다 빼서 올리면 될 것이다. 아무래도 저런 코드가 남아있는 상태라면 어플리케이션의 용량이나 사용하는 메모리 면에서나 좋을 것은 없을 것이다. 

Trackback 0 And Comment 2
  1. 잡학저장소 2009.08.16 18:40 신고 address edit & del reply

    하앍, 괜찮게 정리해 놧는데

Android Sudoku #2. 게임설명 추가하기:버튼 구현, 새 액티비티와 레이아웃 추가

|

1. 반응하는 버튼 만들기
일단 메뉴화면을 만들었으니 이제 버튼을 눌러서 기능에 맞는 기능을 부여해줄 차례이다.
이 것을 구현하기 위한 절차로,
⊙ 버튼에 클릭 리스너 추가
⊙ Dialog를 출력하는 액티비티 추가
⊙ 밋밋한 화면에 Theme적용해보기
우선 버튼에 클릭할 리스너를 추가하기 전에 사용자에게 보여줄 문구를 strings.xml에 적어주자.
(그래야 R.class에도 추가가 되고 프로그래밍 하는 동안 에러 볼일이 적어지니까..)

../res/values/strings.xml

이제 About버튼을 클릭하면 알아차릴 수록 있도록 About버튼에 리스너를 달아주고 그때 해야 할 일을 정해주는 일을 할 차례이다. 

리스너 달기
../src/Sudoku.java

나중을 위해서 4개의 버튼 모두에다 리스너를 달았지만 버튼이 클릭( onClick())이 되었을때 실행시킬 것은 About만 구현하였다. 그리고 아직 할 일이 더 있다. 소스에 보이는 About.class를 아직 작성안했으니 에러가 나니까 어서 About.class를 준비해줘야겠다.
그전에 짚을 부분은 Sudoku클래스가 레이아웃을 준비하면서 버튼 누르는 것을 "듣고"(Listen)있는 기능을 구현해주는 OnClickListener를 "구현"시키기 위해 implements OnClickListener를 꼭 적어주는 것과 이 인터페이스(OnClickListener)를 구현시키려면 반드시 추가해줘야 하는 public void onClick(View v) 함수를 구현해줘야 한다는 것이다. 만약 버튼에서 클릭하는 동작(이벤트)이 감지되면 이 onClick함수가 실행된다.
onClick에서는 이벤트를 일으킨 객체를 식별하기 위해 ID를 사용하고 있는데 우리는 이를 미리 앞에서 만들어서 ../res/strings.xml에 저장해 두었다. 
어쨌든 지금 해야 할 일은 About.class라는 놈을 만드는 것인데, 방법은 About.java를 만들어 보는 것!!

../src/../About.java

이어서 실제로 화면에 보여질 화면을 구성...

../res/layout/about.xml

자... 이제 대충 정리가 된 듯 하다.
About에 불러올 화면(about.xml)과 글(strings.xml)도 준비 되었고, 버튼에 리스너도 달았고(Sudoku.java) 버튼 클릭시 불러올 액티비티(About.java)도 준비 되었다. 하지만 반드시 알아둬야 할 것은 새로운 엑티비티를 추가하게 되면 AndroidManifest.xml에 그 내용을 기재해줘야 한다. About.java를 작성할때 extends Activity라고 되있는데 이렇게 선언되어있으면 AndroidManifest.xml에 등록시켜줘야 한다는 뜻.

/AndroidManifest.xml

이 내용을 덛붙일 위치는 <application> 블럭 아래에 <activity> 블럭 한쌍이 있는데 그 블럭이 끝나는 부분에 붙여주면 된다. 
그럼 아래와 같은 화면을 볼 수가 있다.

음... 좀 보기가 그렇다...


일단은 기쁘게도 버튼이 잘 동작하긴 하지만 출력되는 모양이 별로 마음에 들지 않는데, 이것을 테마(Theme)를 적용해서 바꿔볼까 한다. 상당히 쉽게 구현할 수가 있는데 여러가지 방법이 있겠지만 이번엔 Manifest파일을 직접 수정해서 바꿔보았다.(사실 특별할 것도 없지만... 흑)
/AndroidManifest.xml
결과화면은 다음과 같이 기대할 수 있다.

그리 화려하진 않지만 아까보다는 봐줄만 하다. 뒤로가기 버튼을 누르면 메뉴로 돌아갈 수 있다.


여기까지가 About버튼에 액션을 주고, 다른 액티비티 클래스를 호출하고, 액티비티 작성 후 mainfest파일에 액티비티를 등록뿐만 아니라 테마도 바꿔주는 것 까지 해봤다. 

사실 안드로이드에서 Intent클래스를 이용해서 다른 액티비티를 불러오는 과정은 자주 만나게 될 부분이므로 다른 예제들도 해보면서 익숙하게 해둘 필요가 있다. 물론 Manifest파일에 등록해두는 것을 잊어선 안된다.

다음 글에서는 New Game에 난이도 조절UI 연결, Exit 버튼 그리고 옵션메뉴(배경음과 힌트 옵션) 구현.

Trackback 0 And Comment 0

Android Sudoku #1. 기본적인 메뉴구성

|
노트패드는 소스를 복사해서도 해보고 직접 타이핑(2번씩이나..)해보고 하면서도 원인을 잘 모르겠어서 나중에 내공이 쌓이거나 다른 사람에게서 해결책을 듣기전까지 잠시 접어두고, 인터넷에서 구한 책의 예제를 따라해볼까 하는데, 이번 주제는 바로 수도쿠!

난이도 자체는 Hello World찍는 것보다 딱히 어려울 것이 없지만 세로 화면(Portrait)에서는 잘 보이지만 가로 화면(Landscape)에서 제대로 보이지 않는 경우의 해결법을 알아보는 정도의 포스팅. @_@;

0. 프로젝트 생성
Project name : Sudoku
Package : com.example.android.cgkim.sudoku
Activity : Sudoku
Target/API LV : SDK 1.1  / 2

프로젝트를 생성하면 여러 파일들이 자동으로 생성되는데 이 파일을 간단히 짚어보고 넘어갈 필요가 있다.
Sudoku/src/com.example.android.cgkim.sudoku/Sudoku.java
public class Sudoku extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
간단하니 만큼 소스가 담고 있는 내용도 그리 복잡하진 않다. 간단히 말해 R.layout.main이라는 놈을 화면에 보여주는 것이다. 그리고 R.layout.main은 res/layout.main.xml에 대응된다고만 생각하고 넘어가련다.(사실은 그렇지 않지만 그리 틀린말도 아니고 이렇게 하는 편이 이해하기 쉬우니까...)
이쯤이면 눈치까야 한다. 처음 화면을 구성하기 위해서 res/layout/main.xml이 파일을 손보면 된다는 뜻. 이제 초라하지만 어쨋든 간단하게라도 화면을 구성해봐야 할 차례.

1. 메뉴 만들기

LinearLayout, TextView. Button


Sudoku.java는 손댈 일이 없고 ../res/layout/main.xml 파일을 xml편집모드로 위와 같은 화면을 구성한다.
Sudoku/res/layout/main.xml

main.xml에서 "@+id/...."로 된 부분은 그 객체의 id의 값을 정해주는 소스이고 "@string/...." 부분은 string에 있는(@: at) ...라는 녀석의 값을 참조하라는 뜻이다. 어쨌든 그 ...라는 값이 string이라는 곳에 없기 때문에 생기는 에러이다. 그러면 그것을 해결하려면 어째야 하는가 하니
res/values/strings.xml에 다음과 같이 입력해서 해결할 수 있다.
../res/values/strings.xml

여기까지 작성하고 일단 에뮬레이터를 실행시키면 다음과 같은 화면이 나오게 된다.


뭔가... 뭔가 다른 점이 있다... 바로 배경색!!! 실수한척 하고 있지만 의도적으로 배경색을 지정하지 않았는데 그 이유는 배경색도 버튼에서 이름을 불러오기 위해 그 값들을 다른 파일에서 불러왔듯이 배경색도 다른 파일에서 그 값을 불러와 사용할 수 있다는 것을 보여주기 위함이다. 여기서 하고픈 말은 색 정보, 이름정보 등등을 각기 다른 파일에 따로 정리해서 넣어두면 차후에 수정하기에 용이하기 때문이다. 

../res/values/color.xml


그리고 배경화면도 값을 주어 지정해주자...
../res/layout/main.xml

이렇게 손을 봐주고나서 에뮬레이터를 실행시키면 배경색이 바뀌는 것을 볼 수 있다. 

별 내용없이 글만 길어져서 여기서 맺어야 할 듯 한데 그러기 전에 해결해야할 문제가 하나있다. 말보다 그림.

Dang~ 바로 요것. 버튼이 잘려서 나온다는 문제점이 발생했다.(에뮬레이터 활성 후 키패드의 7 혹은 9)

3. 가로본능 구현
침착하자. 가로 본능에 충실한 UI를 제공해주면 될일이다. 문제는 어떻게 하느냐 인데... 생각보다 간단하다.
절차는 layout-land라는 폴더를 만들어서 거기다가도 main.xml에 화면을 보여줄 UI를 작성하면 된다. Portrait에서의 main.xml, Landscape에서의 main.xml이 각각 세로와 가로일때의 화면을 담당하며 이녀석과 대응되는 것은 처음에 보았던 R.layout.main 이녀석이다. 

어쨌든 가로본능을 위한 UI의 코드
../res/layout-land/main.xml

이제 다시 빌드시키고 에뮬레이터 구동시키면 다음과 같이 알흠다운 화면을 볼 수 있을 것이다.


지금까지의 내용만으로는 그냥 화면을 구성하고 가로로 눞혔을때에 적절한 화면을 보여주는 정도에 불과하고 옵션 메뉴나 각 버튼은 작동하지 않는다. 하지만 프로젝트 생성시 자동생성되는 폴더나 파일들 중 일부의 기능과 용도, 사용법, 연계법을 약간 맛을 보았고, 세로화면과 가로화면을 따로 구성할 수 있다는 것도 알아보았다.

다음 포스트에서는 About버튼을 누르면 글상자를 보여주는 것을 구현하려 한다. 

Trackback 0 And Comment 0
prev | 1 | next