[Android] OptionMenu Android 2011. 12. 15. 18:08
옵션 메뉴는 폰에서 메뉴 버튼을 눌렀을 때 하단에 나타나는 메뉴이다.

총 6개 까지만 적용이 가능하고 공간이 넘어 갈 경우 MORE를 통해서 넘겨 볼 수 있다.

옵션 메뉴 외에 컨텍스트 메뉴가 있는데 이것은 일정 시간 누르면 화면 중안에 나타나고, 서브 메뉴는 메뉴 항목을 가지는 일종의 팝업으로 화면 한 가운데 나타난다.

다음은 간단한 옵션 메뉴의 예이다.

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        TextView text = new TextView(this);
        text.setText("Click Menu");
        setContentView(text);
    }
 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu){
  super.onCreateOptionsMenu(menu);
  MenuItem item = menu.add(0,1,0,"1번");
  //item.setIcon(R.drawable.calendar);
  item.setAlphabeticShortcut('a');
  menu.add(0,2,0,"2번");
  //item.setIcon(R.drawable.calendar);
  SubMenu sub = menu.addSubMenu("etc");
  sub.add(0,3,0,"1번");
  sub.add(0,4,0,"2번");
  return true;
 }
 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item){
  switch(item.getItemId()){
  case 1:
   Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
   return true;   
  case 2:
   Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
   return true;
  case 3:
   Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
   return true;
  case 4:
   Toast.makeText(this, "4", Toast.LENGTH_SHORT).show();
   return true;
  }
  return false;
 }

add(0,1,0,"1번") 에서 보면 처음의 인자는 그룹 아이디, 다음은 아이템 아이디, 다음은 메뉴의 순서를 말하는 것인데 0으로 두면 순차적으로 붙는다. 마지막은 캡션 문자열을 말한다.

또한 onCreateOptionsMenu 메서드는 최초 한번만 실행 되는 것이다.

다음은 XML로 구성한 경우를 살펴 보자.

먼저 res 폴더 아래에 menu 폴더를 생성하고 그곳에 menu.xml 파일을 생성한 후 다음과 같은 코드를 넣는다.

<item android:id="@+id/one"       
       android:title="1번"
    />
    <item android:id="@+id/two"       
       android:title="2번"
    />
    <item android:id="@+id/three"       
       android:title="etc">
       <menu>
       <item android:id="@+id/four"       
        android:title="3번"
       />
       <item android:id="@+id/five"       
        android:title="4번"
       />      
       </menu>
    </item>

다음으로 java 파일이다.

@Override   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        TextView text = new TextView(this);
        text.setText("Click Menu");
        setContentView(text);
    }
 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu){
  super.onCreateOptionsMenu(menu);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.menu,menu);
  return true;
 }
 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item){
  switch(item.getItemId()){
  case R.id.one:
   Toast.makeText(this, "1", Toast.LENGTH_SHORT).show();
   return true;   
  case R.id.two:
   Toast.makeText(this, "2", Toast.LENGTH_SHORT).show();
   return true;
  case R.id.four:
   Toast.makeText(this, "3", Toast.LENGTH_SHORT).show();
   return true;
  case R.id.five:
   Toast.makeText(this, "4", Toast.LENGTH_SHORT).show();
   return true;
  }
  return false;
 }

이렇게 넣어주고 실행 해 보면 이전과 동일한 결과를 얻음을 확인 할 수 있을 것이다.