본문 바로가기

Android/메뉴(Menu)

안드로이드/Android 옵션메뉴(OptionMenu) 사용방법 ~!


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

 < 프로젝트 적용 > 
   API LEVEL : 8  
   minSdkVersion : 8 
   targetSdkVersion : 8  
   Java Compiler Level : 1.6  
   Text file encoding : UTF-8






안드로이드/Android 옵션메뉴(OptionMenu) 사용방법 ~!





안드로이드 옵션메뉴(OptionMenu) 사용방법 입니다. 


안드로이드 옵션메뉴(OptionMenu) 자체는 Activity에서 생성 관리고 있습니다. 그렇기 때문에 Activity의 몇몇 메서드를 오버라이드해서 사용하시면 옵션메뉴(OptionMenu)의 생성 및 종료에 대한 콜백 메서드를 활용 할 수 있습니다.


package arabiannight.tistory.com.optionmenu;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

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

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_open:
			
			// 옵션키를 누르지 않고 강제로 OptionMenu를 열어 준다.
			// 메뉴키를 누른것과 같은 효과 (호출 -> 종료 -> 호출 -> 종료)
			openOptionsMenu();
			
			break;
			
		case R.id.btn_close:
			
			// 옵션키를 누르지 않고 강제로 OptionMenu를 닫아 준다.
			// 옵션키가 Open 상태일때를 확인하고 종료만 가능하다. (종료만 가능)
			closeOptionsMenu();
			
			break;

		default:
			break;
		}
	}
	
	/** 
	 * Flow
	 * 1) onCreateOptionsMenu()
	 * 2) onPrepareOptionsMenu()
	 * 3) onOptionsItemSelected()
	 * 4) onOptionsMenuClosed()
	 */
	
	/**
	 * OptionMenu가 최초로 생성될 때만 호출 된다.
	 * 그 이후에는 OptionMenu가 화면에 나타날 경우
	 * onPrepareOptionsMenu()만 호출 된다.
	 * Activity가 onDestory()될 때 OptionMenu도 Destory 된다.
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		Log.d("OptionMenu", "onCreateOptionsMenu()");
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	/**
	 * 스크린에 맞는 OptionMenu를 화면에 표시하기 위해 준비할 때 호출 된다.
	 * 옵션메뉴가 화면에 나타날 때마다 호출 된다.
	 */
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		Log.d("OptionMenu", "onPrepareOptionsMenu()");
		return super.onPrepareOptionsMenu(menu);
	}
	
	/**
	 * OptionMenu 아이템이 선택될 때 호출 된다.
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Log.d("OptionMenu", "onOptionsItemSelected()");
		return super.onOptionsItemSelected(item);
	}
	
	/**
	 * OptionMenu가 종료될 때 호출 된다.
	 */
	@Override
	public void onOptionsMenuClosed(Menu menu) {
		Log.d("OptionMenu", "onOptionsMenuClosed()");
		super.onOptionsMenuClosed(menu);
	}

	/**
	 * OptionMenu가 강제로 Open될 때 호출 된다.
	 */
	@Override
	public void openOptionsMenu() {
		Toast.makeText(MainActivity.this, "OptionMenu 강제 호출",
				Toast.LENGTH_SHORT).show();
		super.openOptionsMenu();
	}
	
	/**
	 * OptionMenu가 강제로 Close될 때 호출 된다.
	 */
	@Override
	public void closeOptionsMenu() {
		Toast.makeText(MainActivity.this, "OptionMenu 강제 종료",
				Toast.LENGTH_SHORT).show(); 
		super.closeOptionsMenu();
	}

}



일단 옵션메뉴는 예제 코드를 통해 사용하시면 됩니다. 생성 및 종료될 때의 함수를 오버라이드 할 수 있기 때문에 콜백 형식으로 사용할 수 있습니다.


주의점!!!! 옵션메뉴 강제호출과, 강제종료 메서드는 정상적으로 동작하지만 한번은 오버라이드 메서드를 사용할 수 있고 다시 클릭시 오버라이드 메서드를 사용할 수 없습니다. 오버라이드 메서드를 사용하기 전에 시스템에서 가로채 가는 듯 합니다. 하지만!!! 동작은 정상적으로 됩니다.



파일첨부 : 

TestOptionMenu.zip



스크린샷 : 




유용하게 사용하시기 바랍니다.^^



감사합니다.