본문 바로가기

프로그래밍/안드로이드

[안드로이드/Android] 안드로이드 메뉴(Menu)

안드로이드 메뉴(Menu)


읽기 전에 손가락 한번 꾸~욱 _(__)_ ♥

감사합니다.^^ ☞ ☜

안드로이드에는 메뉴라는 기능이 있습니다. 

개인적으로는 그리 예쁘지 않아 자주 사용하지는 않지만 테스트용이나 간단한 설정용으로 사용하기에 무난한거 같습니다. 


안드로이드에서 사용하는 메뉴는 크게 3가지가 있습니다. 


옵션 메뉴 

사용자가 메뉴버튼을 누르면 화면에 나타납니다. 최대 6개의 항목을 가질수 있으며 6개가 넘으면 5개까지 나타나고 6번째는 More항목이 나타나고 나머지는 숨겨지게 됩니다.

More항목을 클릭하면 숨겨진 나머지 메뉴들이 확장메뉴 형태로 나타납니다.

아이콘으로 꾸미기는 가능하나, 체크박스, 라디오 그룹을 사용할 수는 없습니다.


컨텍스트 메뉴 

화면을 꾸~욱 누르고 있으면 나타나는 메뉴입니다. 화면의 중앙에 나타납니다.

아이콘을 추가 할수는 없지만 체크박스나 라디오 그룹을 사용할 수 있습니다.


서브 메뉴 

옵션메뉴나 컨텍스트 메뉴에 추가적인 항목을 넣을때 사용되며 서브메뉴에 서브메뉴 추가는불가능합니다.


옵션 메뉴(OptionsMenu)



옵션메뉴를 생성하기 위해서는 아래 3가지 메소드를 재정의 합니다.


public boolean onCreateOptionsMenu (Menu menu)

 - 메뉴 버튼을 눌렀을때 시스템에 의하여 자동적으로 호출되는 메소드 입니다. 

   매개변수로 빈 메뉴객체인 menu에다가 원하는 항목을 추가 하시면 됩니다.


public boolean onPrepareOptionsMenu (Menu menu)
 - 메뉴가 열릴 때마다 호출되는 메소드 입니다. 동적으로 메뉴를 추가하거나 삭제가 가능합니다. 
   사용하는 메뉴가 고정된 형태라면 굳이 사용하실 필요가 없습니다.

public boolean onOptionsItemSelected (MenuItem item)

 - 메뉴항목을 선택했을때 호출되는 메소드 입니다. 

   매개변수로 넘어온 item은 사용자가 선택한 메뉴 항목입니다.


MenuTestActivity.java



main.xml



Menu, 클래스 설명 보기



MenuItem 클래스 설명 보기




컨텍스트 메뉴(ContextMenu)



☞ 좌측은 ContextMenu 그림이며 우측은 3.0 허니컴에서 추가된 액션바 그림입니다.


컨텍스트 메뉴는 옵션 메뉴와 거의 동일합니다. 하지만 옵션메뉴처럼 메뉴버튼에 자동 등록된 녀석이 아니라 원하는 뷰마다 사용가능한 녀석이기 대문에 "등 록" 이라는 메소드가 하나 추가되어 있습니다.


컨텍스트 메뉴를 생성하기 위해서는 아래 4가지 메소드를 재정의 합니다.


public void registerForContextMenu(View view)

 - 특정 뷰에 컨텍스트 메뉴를 추가하고자 할때 매개변수로 등록하고자 하는 

    뷰를 넣어 메소드를 호출합니다. 필요하다면 여러개 뷰의 등록도 가능합니다.


public boolean onCreateContextMenu (ContextMenu menu, View v,

                ContextMenu.ContextMenuInfo menuInfo)

 - 특정 뷰를 컨텍스트메뉴로 등록하였하면 해당 뷰를 롱클릭하면 onCreateContextMenu가 자동 호출됩니다. 복수의 등록이 가능하므로 2번째 매개변수를 통해 이벤트가 발생한 View를 알수 있으며 3번째 매개변수를 표시해야 할 아이템의 추가적인 정보를 담고 있습니다. 

   이 정보는 매개변수 v 에 따라 매우 다양하게 제공됩니다. 옵션메뉴와 다른 점은 이메소드는 컨텍스트 메뉴가 사용될 때마다 호출된다는 점입니다. 그렇기 때문에 옵션메뉴에 있던 onPrepareOptionsMenu() 가 컨텍스트메뉴에는 필요하지 않습니다.


public boolean onContextItemSelected (MenuItem item)

 - 컨텍스트 메뉴의 항목을 선택했을때 호출되는 메소드 입니다. 

   매개변수로 넘어온 item은 사용자가 선택한 메뉴 항목입니다.


void onCreatecontextMenu(ContextMenu menu)

 - 자신이 필요한 컨텍스트메뉴를 개별적으로 재정의 하여 사용합니다. 굉장히 번거롭습니다.


MenuTestActivity02.java



main.xml




서브 메뉴(SubMenu)


서브 메뉴는 OptinosMenu와 ContextMenu에서 공통적으로 사용되는 메뉴입니다.

일반적으로 두메뉴의 하위에 구성된 메뉴를 말합니다. 기존에 작성한 메뉴들은 사용자가 메뉴항목을 선택하면 onXXxxxxxItemSelected() 메소드가 호출되어 해당 메소드에서 정의된 작업을 수행하게 되지만 Sub Menu로 구성된 항목을 선택하면 또다른 메뉴가 리스트 형태로 출력이 됩니다.

서브메뉴는 다른 메뉴들과는 다르지만 독립적으로 관리되는 것이 아니라 일반메뉴에 포함된 형태로 여겨지기 때문에 코드상에 모두 작성하면 됩니다.


서브메뉴에 서브메뉴를 추가하면 실행시 아래와 같은 에러가 발생합니다.

E/AndroidRuntime( 9248): java.lang.UnsupportedOperationException: Attempt to add a sub-menu to a sub-menu.

 


MenuTestActivity03.java


main.xml



덧글]

개발하시다가 온몸이 찌뿌둥하시면 아래 동영상을 따라 스트레칭을 한번하세요.


1. 목디스크 예방을 위한 목운동    ☞  http://jwandroid.tistory.com/192 

2. 손목터널증후군 손목스트레칭으로 예방합시다.     ☞  http://jwandroid.tistory.com/193

3. 개발자 여러분 허리를 세우세요 - 척추체조 1번     ☞  http://jwandroid.tistory.com/194

4. 개발자 여러분 허리를 세우세요 - 척추체조 2번     ☞  http://jwandroid.tistory.com/195

5. 개발자 여러분 허리를 세우세요 - 척추체조 3번     ☞   http://jwandroid.tistory.com/196

6. 개발자 여러분 허리를 세우세요 - 척추체조 4번     ☞  http://jwandroid.tistory.com/197