2010년 2월 2일 화요일

안드로이드 프로그래밍 - Menu구현의 이해(3)

UI구성도 마찬가지지만 메뉴구성 또한 보통은 하드코딩 보다는 디자인 부분을 분리해서 프로그램을 만드는것이 여러모로 유리합니다. 학습용 프로그램들이야 뭐 날코딩해도 원리만 알면 그만이니까 상관없지만, 제품생산을 위해 다른 사람들과의 공동 작업이나 분업이 시작되면 영역별로 쪼개서 작업하지 않고서는 서로 인간성 테스트하기 딱 좋습니다.^^

요즘의 저작용 프로그램들은 XML을 이용해서 디자인 부분을 분리하는 방법이 대세입니다. 안드로이드 역시 디자인 부분을 분리해서 앱을 만들어 낼 수 있습니다. 위젯의 화면배치나 메뉴구성들이 여기에 해당되겠습니다.

앞의 문서들에서 안드로이드 메뉴의 종류와 특징 그리고 callback method 개념만 잡으면 나머지는 사실 어려운게 없습니다. 뭐 메뉴자체가 어려운게 없지만요. ^^

이번에는 XML을 이용해서 코드와 디자인(?)을 분리해서 보겠습니다. 여기서 알아야할 개념은 각각의 역할이 분명히 다르다는 것입니다. 아래 코드 조각은 역시 http://developer.android.com/guide/topics/ui/menus.html의 내용이며, 이 코드를 완성해 보도록 하겠습니다.
[code xml]
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/new_game"
          android:title="New Game" />
    <item android:id="@+id/quit"
          android:title="Quit" />
</menu>
[/code]위 XML은 id가 "new_game"이고 메뉴 이름이 "New Game"인 것과 동일 형식으로 "Quit"인 메뉴를 정의하고 있습니다. 파일명은 options_menu.xml 이라고 가정하겠습니다.

[code]
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    return true;
}
[/code] 위 코드는 options_menu.xml에서 파일명만 따온 options_menu를 자원화하여 프로그램에서 불러들이는 코드입니다.

과정을 조금 풀어서 설명하자면
Step 1) options_menu.xml이 저장되면 이클립스는 곧바로 해당 파일을 R.java파일에 자원으로 변환 합니다.

Step 2) R.java파일의 내용을 살짝보면 public static final int options_menu=0x7f050000; 처럼 어딘가에 저장됩니다. (xml확장자를 제거한 이름으로)

Step 3) MenuInflater라는 놈이 R.menu.options_menu 즉 0x7f050000 번지의 내용을 읽어들여 callback method로 받은 menu객체에 자동으로 메뉴를 등록합니다.

아래 코드와 위의 코드는 보여지는 결과물에서는 다른점이 없지만, 디자인과 코드가 분리되었고 개발자는 추가되고 변경되는 부분에만 집중할 수 있으며, 유지보수의 범위가 명확해 지는 장점이 있습니다.[code java]
/* Creates the menu items */
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, MENU_NEW_GAME, 0, "New Game");
    menu.add(0, MENU_QUIT, 0, "Quit");
    return true;
}

/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_NEW_GAME:
        newGame();
        return true;
    case MENU_QUIT:
        quit();
        return true;
    }
    return false;
}
[/code]
안드로이드 프로그래밍 - Menu구현의 이해(1)
안드로이드 프로그래밍 - Menu구현의 이해(2)

댓글 1개:

  1. trackback from: 스마트폰이 도대체 뭐야?
    요즘에 너나할꺼 없이 아이폰이니 안드로이드폰이니, 스마트폰이니 한마디씩 떠든다. 나도 최근에 아이폰을 구입했을 정도이니, 정말 아이폰 광풍이라 할만하다. 아이폰이 들어오니 마니, 에스케이티에서 들어온다, 케이티에서 들어온다 말도 많았었다. (엘지티는 이 설왕설래에 완전히 제외되었다.이유는 전송방식이 다르기 때문이다.) 그러던 중 드뎌 케이티에서 아이폰을 판매하기에 이르렀다. 해외에서 보던것과 같이우리나라에서도 줄을 서서 개통을 기다리는 사람들의 모습..

    답글삭제