본문 바로가기
[Public] 프로그래밍/Android

[Android] 메뉴 활용해 보장 #1 (옵션 메뉴)

by 차출발 2010. 7. 28.
반응형

오늘은 메뉴를 사용하는 방법에 대해 공부 하여 보자

안드로이드에서 지원하는 메뉴는 3가지 종류가 있다.

옵션 메뉴, 컨텍스트 메뉴, 서브 메뉴

 

이번에 볼 메뉴는 옵션메뉴이다.

 

옵션 메뉴가 무엇일가 ?

  • 액티비티의 주 메뉴이다. 평소에 아래쪽에 숨겨져 있으며 MENU 버튼을 눌려야 나타난다.

     

  • 최대 6개까지 항목을 가지며 6개가 넘으면 5번 메뉴만 표시하고 나머지는 more 표시한다.

 

  • more 항목을 누르면 확장 메뉴 형태로 나타난다.

     

  • 아이콘을 달아 장식을 할 수 있지만 체크박스나 라디오 그룹을 구성할 수 없다.

 

  • 단순히 명령만 입력 받는 메뉴이다.

 

옵션 메뉴가 무엇인지 알았다면

 

이제 옵션 메뉴를 만들려면 어떻게 해야 할 가 ?

    옵션메뉴를 만들기 위해서는 onCreateoptionMenu 함수를 이용한다.

 

  • boolean onCreateoptionMenu (Menu menu)    

    메뉴 버튼을 눌렸을 때 액티비티가 이 함수를 호출하게 된다.

    한마디로 여기에서 메뉴를 만드는 것이다.

    그럼 메뉴를 만들어보자

    메뉴를 만들기 위해서는 항목을 추가해야 한다.

    항목을 추가하는 함수에 대해 알아보자

     

    Add 함수

    Ÿ MenuItem add (int groupId, int itemId, int order, CharSequence title)

    Ÿ MenuItem add (int groupId, int itemId, int order, int titleRes)

    Ÿ SubMenu addSubMenu (int titleRes)

     

    래퍼런스

    ž groupID     : 항목의 그룹을 구성할 때 (단일 항목일 시 None 0으로 설정)

    ž itemID    : 항목의 고유한 ID

    ž order     : 메뉴의 순서를 나타낸다. (None 0일 시 추가된 순서로 된다.)

    ž title, titleRes     : 메뉴 항목의 캡션 문자열 (문자열 상수와 리소스 문자열의 ID를 줄 수 있다. )

     

     

     

각각의 메뉴의 속성을 바꾸려면 어떻게 해야 할 가?

속성 변경 함수

Ÿ MenuItem setIcon(int iconRes)                아이콘 설정

Ÿ MenuItem setTitle(CharSequence title)            타이틀 명 설정

Ÿ MenuItem setVisible(boolean visible)            보이기 설정

Ÿ MenuItem setAlphabeticShortcut(char alphaChar)        바로 가기 문자 설정

Ÿ MenuItem setNumericShortcut(char numericChar)        바로 가기 숫자 설정

Ÿ MenuItem setChecked(boolean checked)            체크옵션 추가

Ÿ MenuItem setEnabled(boolean visible)            이용가능 설정

 

속성변경 함수를 이용하면 쉽게 바꿀 수 있다.

 

 

 

단하게 메뉴를 만들면 상관없지만 만약 메뉴가 많다면 어떻게 해야 ?

항목이 많을 경우 addSubMenu 메서드로 별도의 서브 메뉴를 추가한다.

SubMenu 는 Menu로부터 상속 받기 때문에 menu의 자원을 마음대로 사용할 수 있다.

메뉴를 작성할 때 메뉴마다 속성을 넣어주어서 각각의 메뉴를 만들 것이다.

위의 속성 변경함수를 봐보자.

어랏~! 리턴 값이 다시 메뉴를 리턴하네

Menu 함수는 리턴 값으로 자신의 Menu 리턴 하므로 코딩 연속적으로 사용할 수도 있다.

예를 들자면

menu.add(…) . setIcon(…) . setTitle(…) . setChecked(…) ;

이런식으로

 

자 우리는 지금까지 onCreateoptionMenu 함수를 이용하여 메뉴를 만들었다.

처음 onCreateoptionMenu 함수를 호출해서 메뉴를 만들었기 때문에

만약 메뉴를 편집하게 된다면 onCreateoptionMenu 다시 호출해야한다.

하지만 onCreateoptionMenu함수는 1번만 호출하기 때문에 문제가 생긴다.

 

 

그러면 메뉴를 변경 하려고 하면 어떻게 할가?

그래서 메뉴를 편집하도록 안드로이드에서는 onPrepareoptionsMenu 함수를 제공해준다.

 

  • boolean onPrepareOptionsMenu (Menu menu)    

    이 메서드는 메뉴가 열릴 때마나다 호출된다.

    고로 메뉴 항목을 더 추가하거나 뺄 수 있고 메뉴 항목의 속성도 변경 할 수 있다.

이제 메뉴를 만들고 수정하고 마음대로 다룰수가 있다.

 

 

 

그럼 메뉴를 선택했을 경우 이벤트를 발생시켜야 하지 않겠는가?

이벤트를 발생시켜보도록 하자.

이벤트를 발생시켜주기 위해서는 메뉴항목을 선택해야한다.

메뉴항목을 선택하는 순간 안드로이드에서는 onOptionsItemSelected 라는 함수를 호출한다.

 

  • boolean onOptionsItemSelected (MenuItem item)    

    인수로 사용자가 선택한 메뉴 항목 객체가 전달된다.

    getItemId 메소드를 이용하면 ID값을 조사할 있다.

    ) Int nID = Item.getItemId()

     

 

이제 예제를 통하여 메뉴를 실제로 만들어 보자 !

 

  1. 메뉴를 버튼을 만들자