[안드로이드] 메뉴 생성 - 옵션 메뉴 ( Option Menu )

반응형



이제 드디어 메뉴 생성 에 관한 내용 입니다.
이어지는 글은 위의 링크를 찾아 보세요 ^^;

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥





메뉴 생성

메뉴는 모든 어플리케이션의 중요한 부분이라고 할 수 있는데요.  따라서 다양한 상황에서도 표준화된 인터페이스가 요구되는데, 안드로이드 시스템은 세가지 기본 유형의 메뉴를 제공합니다.


1. 옵션 메뉴 ( Option Menu )
기본적인 메뉴 아이템 Set 입니다. 모바일 기기의 "Menu" 키를 눌렀을 때에 나타나며, 여기에는 또 두가지의 메뉴 그룹이 있습니다.
◎ 아이콘 메뉴 ( Icon Menu ) : "Menu" 키를 눌렀을때 스크린 하단에 최초로 보여지는 아이템들의 모음입니다. 최대 여섯개의 메뉴 아이템을 가질 수 있는데, 여섯개가 넘어가면 "More" 또는 " 더보기 " 등으로 표시해 줍니다. 또한 아이콘을 지원하는 유일한 아이템이며 체크박스, 라디오버튼을 지원하지 않는 유일한 아이템 입니다.

◎ 확장 메뉴 ( Expanded Menu ) : 메뉴 아이템이 여섯개가 넘어 "More" 키를 눌렀을 때 보여지는 수직 아이템들의 목록입니다.


2. 컨텍스트 메뉴 ( Context Menu )
뷰를 길게 누르는 것과 같은 작업에서 보여지는 메뉴 아이템 목록입니다.

3. 서브 메뉴 ( Sub Menu )
옵션 메뉴, 컨텍스트 메뉴 안의 아이템에 의해 보여지는 메뉴 아이템 목록이며,
서브 메뉴 아이템은 또 다른 서브 메뉴를 가질 수가 없습니다.




옵션 메뉴 생성

오픈 될 때 아이콘 메뉴가 보여지고 여섯개 까지 표시할 수 있는 메뉴 입니다. 여섯개 이상이 되면 "More" 키로 표시되는 아이템을 통해 확장 메뉴에서 표시가 되지요.

확장 메뉴는 아이템이 여섯개 이상일 때 자동으로 추가가 됩니다.

옵션 메뉴에서는 어플리케이션의 기본 설정 등을 포함하여 처리하기에 좋겠네요.

이 메뉴가 오픈될 때 시스템은 해당 액티비티의 onCreateOptionsMenu() 메소드를 호출합니다.

따라서 이 메소드를 오버라이드 하고 메뉴(Menu) 객체를 파라미터로 전달하면 되겠네요
XML로 만든 메뉴 리소스를 전개(인플레이트:inflate) 시키거나 add() 메소드를 이용하여 메뉴를 채워 나갈 수 있습니다.

이 메소드는 메뉴아이템(MenuItem) 을 추가한 뒤, 생성된 그 객체를 리턴하는데요, 아이콘이나 단축키(키보드 숏컷 : shortcut) , 인텐트 등의 설정을 리턴된 메뉴아이템으로 처리할 수 있습니다.

옵션 메뉴에서 아이템이 선택될 때는 해당 액티비티에서 onOptionsItemSelected() 메소드가 호출되며, 선택된 메뉴 아이템을 파라미터로 전달합니다.



때문에 add() 메소드에 지정된 정수 ID를 리턴하는 getItemId() 메소드를 통해 어떤 아이템인지 구분할 수가 있습니다.



위의 소스를 보시면 , add() 메소드는 4개의 인자를 가지는데요, 각각은 groupId, itemId, order, title 을 나타냅니다.
groupId 는 메뉴 아이템을 그룹지을 때 사용되고,
itemId 는 아이템 식별을 위해 메뉴 아이템의 고유한 이름이 됩니다.
order 는 아이템 표시 순서를 지정하는데, 기본값으로는 추가된 순서대로 표시가 되고,
title 은 메뉴 아이템이 가지는 이름이며 , 구글 공식문서에서는 문자열 리소스로 작성하도록 권고하고 있네요


아이콘 추가하기

메뉴의 아이콘은 setIcon() 메소드를 통해 추가해주기만 하면 됩니다.

리소스 ID 로 사용할 수 있고 드로블로 사용할 수 있도록 2가지가 있네요~ㅎ


위에 언급했다 싶이, add() 메소드는 추가된 객체를 리턴하기 때문에, 메소드를 이어서 쓸 수 있습니다^^


동적으로 메뉴 바꾸기

메뉴가 오픈될 때 마다 onPrepareOptionsMenu() 메소드가 호출되는데, 그렇기 때문에 이것을 오버라이드 한 후 메뉴 객체를 파라미터로 전달하는 방식으로 프로그램 소스 코드 상에서 동적으로 메뉴를 바꿀 수 있습니다.




이제 옵션 메뉴에 대한 내용은 끝~~
다음 포스팅에선 컨텍스트 메뉴 입니다 ~ ㅎ



관련글





반응형

댓글

Designed by JB FACTORY