[안드로이드] 컨텍스트 메뉴
- 프로그래밍 정보
- 2010. 9. 3.
반응형
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
컨텍스트 메뉴에 대한 내용입니다.
컨텍스트 메뉴
컨텍스트 메뉴는 마우스 우클릭으로 보여지는 메뉴라고 생각하면 될 것 같습니다. 컨텍스트 메뉴에 등록된 뷰를 길게 누르는 행위 ( 약 2초 정도 이상 ) 를 하면 나타나는 것이 컨텍스트 메뉴입니다.
컨텍스트 메뉴에는 어떠한 뷰 객체도 등록할 수 있는데요, 특성상 대부분 리스트 뷰(ListView) 에서 주로 사용되는것 같습니다.
컨텍스트 메뉴는 아이콘 또는 단축키(shortcut) 를 지원하지 않습니다.
컨텍스트 메뉴는 onCreateContextMenu() 메소드와 onContextItemSelected() 메소드를 오버라이드 하여 만들 수 있습니다.
onCreateContextMenu() 안에서 add() 메소드 또는 XML 리소스를 전개하여 메뉴아이템을 추가합니다. 그런 뒤에 registerForContextMenu() 메소드를 사용하여 뷰를 컨텍스트 메뉴에 등록해주어야 하지요
간단한 컨텍스트 메뉴 추가하는 예제 소스 한번 보시죠 ~
onCreateContextMenu() 에서 ContextMenu 와 View, 그리고 ContextMenuInfo 객체를 받아옵니다. 이 메소드에서 메뉴를 추가하고 onContextItemSelected() 메소드에서 MenuItem 객체를 이용하여 AdapterContextMenuInfo.info 필드의 ID를 찾아오게 됩니다.
마지막으로 리스트뷰에 있는 아이템에 컨텍스트 메뉴를 등록해야 되므로, registerForContextMenu(getListView()) 를 이용하여 전체 리스트 뷰를 전달할 수 있겠네요.
컨텍스트 메뉴에는 어떤 뷰 객체도 등록될 수 있기 때문에, 여기의 getListView() 는 어플리케이션의 ListActivity 의 ListView 객체를 리턴하는 것과 같습니다. 결국 리스트안의 아이템들은 컨텍스트메뉴에 등록되는 것입니다.
서브 메뉴 ( Submenu )
서브메뉴는 또 다른 서브메뉴를 제외하면 어떠한 메뉴에도 추가될 수 있는 메뉴입니다. 서브메뉴는 addSubMenu() 메소드를 사용해서 기존에 있는 메뉴에 추가되어 만들어지는데요, 이 메소드는 Menu 의 하위클래스인 SubMenu 객체를 리턴합니다.
API 에는 addSubMenu 메소드가 파라미터의 구별에 따라 총 4개로 만들어져 있군요.
public abstract SubMenu addSubMenu (int titleRes)
public abstract SubMenu addSubMenu (int groupId, int itemId, int order, int titleRes)
public abstract SubMenu addSubMenu (CharSequence title)
public abstract SubMenu addSubMenu (int groupId, int itemId, int order, CharSequence title)
public abstract SubMenu addSubMenu (int groupId, int itemId, int order, int titleRes)
public abstract SubMenu addSubMenu (CharSequence title)
public abstract SubMenu addSubMenu (int groupId, int itemId, int order, CharSequence title)
아무튼 , SubMenu 객체를 리턴받은 뒤 add() 메소드로 메뉴에 추가하면 됩니다.
소스 한번 보실까요?
서브메뉴에서 선택된 아이템은 부모 메뉴의 메소드에 의해 만들어 지게 됩니다.
즉, 서브메뉴에서 메뉴 아이템의 선택은 onOptionsItemSelected() 메소드에서 처리해야 됩니다.
관련글
반응형