Android UI 메뉴 생성
프로그래밍/Android 2013. 8. 23. 11:22Android UI 메뉴 생성
메뉴 종류
Option 메뉴
- 디바이스의 MENU 키를 누름면 하단에 표시되는 메뉴
- Icon Menu : 스크린 하단에 최초로 보여지는 아이템들의 모음. 최대 여섯 개의 메뉴 아이템을 지원한다.
- Expanded Menu : 아이콘 메뉴의 "More" 를 선택했을 때 보여지는 수직적 아이템 목록
Context 메뉴
- long-press 를 수행할 때 나타날 수 있는 스크린 상에 떠있게 되는 floating 메뉴 아이템 목록
서브메뉴
- Option 메뉴 또는 Context 메뉴의 하위로 보여지게 되는 서브메뉴
메뉴 생성
Option 메뉴
- Option 메뉴가 최초로 오픈될때 onCreateOptionsMenu() 메소드가 실행된다.
- 메뉴를 구성하기 위해서는 파라미터로 전달되는 Menu 오프젝에 메뉴를 추가하면 된다.
- XML 로 정의된 메뉴를 inflate 하거나 코드롤 메뉴를 추가하면 된다.
Option 메뉴 상의 메뉴가 선택될때 onOptionsItemSelected() 메소드가 실행된다.(Activity 콜백)
선택된 MenuItem 을 파라미터로 넘겨준다.
/* Create the menu items */
public boolean onCreateOptionsMenu( Menu menu){
menu.add(0, MENU_NEW_GAME, 0, "New Game"); // groupId, itemId, order, title
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;
}
}
아이콘 추가하기
menu.add(0, MENU_QUIT, 0, "Quit").setIcon( R.drawable.menu_quit_icon);
메뉴 수정하기
- 메뉴가 오픈될때마다 onPrepareOptionsMenu( Menu menu) 메소드가 실행된다.
- 해당 메소드를 오버라이드해서 메뉴를 적절하게 수정할 수 있다.
- 애플리케이션, 게임의 상태에 따라 아이콘을 변경한다든지, 메뉴를 추가한다던지 할때 유용하다.
Context 메뉴
- Activity의 Context 메뉴 콜백 onCreateContextMenu(), onContextItemSelected() 을 통해 Context 메뉴를 생성한다.
- 생성된 Context 메뉴는 registerForContextMenu()를 사용해서 뷰View 에 대한 ContextMenu 를 등록한다.
// ContextMenuInfo 는 선택된 뷰와 선택된 오브젝트에 대한 추가적인 정보를 제공한다.
public void onCreateContextMenu( ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, EDIT_ID, 0, "Edit");
menu.add(0, DELETE_ID, 0, "Delete");
}
public boolean onContextItemSelected( MenuItem item){
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()){
case EDIT_ID :
editNote(info.id); return true;
case DELETE_ID :
deleteNote(info.id); return true;
default :
return super.onContextItemSelected(item);
}
}
}
// 리스트뷰에 있는 모든 아이템에 Context 메뉴를 등록한다.
registerForContextMenu( getListView());
서브메뉴
- 서브메뉴는 또 다른 서브 메뉴를 제외한 어떤 메뉴에든 추가될 수 있다.
public boolean onCreateOptionsMenu(Menu menu){
boolean result = super.onCreateOptionsMenu( menu);
SubMenu fileMenu = menu.addSubMenu("File");
SubMenu editMenu = menu.addSubMenu("Edit");
fileMenu.add("new");
fileMenu.add("open");
fileMenu.add("save");
editMenu.add("undo");
editMenu.add("redo");
return result;
}
XML로 메뉴 정의하기
- 세개의 유효한 엘리멘트 <menu>, <group>, <item>
// XML 파일 (options_menu.xml . res/menu/ 폴더에 위치)
// JAVA 코드
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
메뉴 특성
메뉴 그룹
- 메뉴의 특성을 공유하는 메뉴 아이템들의 집합
- setGroupVisible(), setGroupEnabled(), setGroupCheckable()
체크가능한 메뉴 아이템
menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate").setCheckable(true);
// IN onOptionsItemSelected()
switch( item.getItemId()){
case VIBRATE_SETTING_ID :
if( item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
}
// Group Checkable
SubMenu subMenu = menu.addSubMenu("Color");
subMenu.add(COLOR_MENU_GROUP, COLOR_RED_ID, 0, "Red");
subMenu.add(COLOR_MENU_GROUP, COLOR_BLUE_ID, 0, "Blue");
subMenu.setGroupCheckable( COLOR_MENU_GROUP, true, true); // groupId, checkable, true => radio button | false => checkbox
Shortcut 키
menu.add(0, MENU_QUIT, 0, "Quit").setAlphabeticShortcut("q");
메뉴 아이템 인텐트
단일 메뉴 아이템에 인텐트 설정하기
- 새로운 액티비티를 실행하는 메뉴
// IN onCreateOptionsMenu() MenuItem menuItem = menu.add(0, PHOTO_PICKER, 0, "Select Photo"); menuItem.setIntent( new Intent(this, PhotoPicker.class));
- 동적으로 인텐트 추가하기
public boolean onCreateOptionsMenu( Menu menu){
super.onCreateOptionsMenu( menu);
// Create an Intent that describes the requirements to fulfill,
// to be included
// in our menu.
// The offering app must include a category value
// of Intent.CATEGORY_ALTERNATIVE
Intent intent = new Intent(null, getIntent().getData());
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
menu.addIntentOptions(
thisClass.INTENT_OPTIONS, // Menu group
0, // Unique item ID(none)
0, // Order for the items(none)
this.getComponentName(), // The current Activity name
null, //Specific items to place first (noen)
0, // Additional flags to control items (none)
null); //Array of MenuItems that corrolate to specific items (none)
}
'프로그래밍 > Android' 카테고리의 다른 글
| 안드로이드 레이아웃 (0) | 2013.08.25 |
|---|---|
| 안드로이드 스타일과 테마 적용하기 (0) | 2013.08.25 |
| 안드로이드 노티피케이션 (0) | 2013.08.25 |
| Android 커스텀 다이얼로그 생성 (0) | 2013.08.23 |
| 안드로이드 UI 다이얼로그 생성 1 (0) | 2013.08.23 |