본문 바로가기

Android/메뉴(Menu)

안드로이드/Android 옵션메뉴(OptionMenu) SubMenu 활용 하기~!


 < 개발 환경 >  
   작성일 : 2013.01.17
   OS 설치 버전 : Windows7 32bit  
   SDK 설치 버전 : 안드로이드 SDK 4.2 (젤리빈) / API LEVEL : 17  
   ADT 설치 버전 : 21   
   Java 설치 버전 : JDK 1.6.0_20 / JRE6 
   이클립스 설치 버전 : Indigo
   테스트단말 : 삼성 갤럭시 S2 4.0.4 (아이스크램 샌드위치)   

 < 프로젝트 적용 > (2가지 버전으로 작업)
   API LEVEL : 8, 14  
   minSdkVersion : 8, 14
   targetSdkVersion : 8, 14  
   Java Compiler Level : 1.6  
   Text file encoding : UTF-8




안드로이드/Android 옵션메뉴(OptionMenu) SubMenu 활용 하기~!




안드로이드 옵션메뉴(OptionMenu)에서 SubMenu를 활용 하는 방법 입니다. SubMenu란 옵션메뉴에서 하나의 Menu item을 그 하위의 sub item들과 묶어서 하나의 Group 형태로 활용하는 방법 입니다. SubMenu를 설정하고 SubMenu가 선택이 되었을 때는 안드로이드 ContextMenu와 동일한 형태의 팝업창을 보여 줍니다.


Menu

Menu

Menu 

SubMenu 

          -> Menu              

          -> Menu            

          -> Menu

Menu


의 형태로 보시면 됩니다. 자 그럼 구현 방법에 대해 알아 보겠습니다. 일단 예제에는 Java 코드로 동적으로 생성하는 방법이 나와 있는데 XML 형태로 구현을 원한다면 아래 예제의 Java 코드의 Menu.add() 부분을 주석처리 하고,

// getMenuInflater().inflate(R.menu.activity_main, menu);

주석을 풀고 사용 하시면 됩니다.



package arabiannight.tistory.com.optionmenusubmenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class MainActivity extends Activity {

	final int ONE = 0;
	final int TWO = 1;
	final int THREE = 2;
	final int FOUR = 3;
	final int FIVE = 4;
	final int SIX = 5;
	final int SEVEN = 6;
	final int EIGHT = 7;
	final int NINE = 8;
	final int TEN = 9;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		
		// XML로 옵션메뉴 추가 하기
//		getMenuInflater().inflate(R.menu.activity_main, menu);

		// Java Code로 옵션메뉴 추가 하기
		menu.add(0, ONE, Menu.NONE, "ONE").setIcon(android.R.drawable.ic_menu_rotate);
		menu.add(0, TWO, Menu.NONE, "TWO").setIcon(android.R.drawable.ic_menu_add);
		menu.add(0, THREE, Menu.NONE, "THREE").setIcon(android.R.drawable.ic_menu_agenda);
		menu.add(0, FOUR, Menu.NONE, "FOUR");
		menu.add(0, FIVE, Menu.NONE, "FIVE");
		
		// Menu에 SubMenu 추가
		SubMenu subMenu = menu.addSubMenu("글씨체 설정");
		
		subMenu.add(1, SIX, Menu.NONE, "굴림체");
		subMenu.add(1, SEVEN, Menu.NONE, "이탤릭체");
		subMenu.add(1, EIGHT, Menu.NONE, "맑은고딕");

		return true;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		return super.onPrepareOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case ONE:
			Toast.makeText(MainActivity.this, "ONE", Toast.LENGTH_SHORT).show();
			break;

		case TWO:
			Toast.makeText(MainActivity.this, "TWO", Toast.LENGTH_SHORT).show();
			break;

		case EIGHT:
			Toast.makeText(MainActivity.this, "EIGHT", Toast.LENGTH_SHORT).show();
			break;

		default:
			break;
		}

		return super.onOptionsItemSelected(item);
	}

}



XML의 메뉴 구조 모습 입니다.




파일첨부 : 

(프로요 SDK 2.2 버전)  : TestOptionMenuSubMenu.zip


(아이스크림 샌드위치 SDK 4.0 버전) : TestOptionMenuSubMenuICS.zip



두가지 스크린샷 모두 소스는 동일 합니다. 다만 아이스크림 샌드위치(4.0) 버전 부터 옵션메뉴 자체가 바꼈네요. 개인적으로는 더 세련되 진 것 같습니다. 하지만 Menu.add().setIcon()등 기존에 지원되던 기능들이 안되는게 있다는게 좀 아쉽네요^^;


만약 아이스크림 샌드위치(4.0) 버전 에서 기존 버전의 옵션메뉴를 사용하고 싶다면 OptionMenu 자체를 커스텀해서 사용 하셔야 합니다.



스크린샷 (프로요 SDK 2.2 버전) :




스크린샷 (아이스크림 샌드위치 SDK 4.0 버전)  :





감사합니다.