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 |