본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Menu 에 대한 모든 것 ( OptionMenu, ContextMenu, Check Menu )

by 돼지왕 왕돼지 2012. 2. 28.
반응형


안녕하세요 돼지왕 왕돼지입니다.

오늘은 Menu 에 대한 모든 것 ( OptionMenu, ContextMenu, Check Menu )이라는 주제로 이야기를 해보려고 합니다.



메뉴의 종류에 대해 설명 좀 해주세요.

  
 1. 옵션 메뉴 : 화면 아래 숨겨져 있다가 Menu 버튼을 누르면 등장하는 녀석입니다. 최대 6개까지 항목까지 표시가 되며, 6개가 넘으면 5번째까지 나타나고 나머지는 More에 합쳐집니다. Icon 장식 가능하며, 단순 명령 입력만 받습니다.
 
 2. 컨텍스트 메뉴 : 화면을 일정 시간 누르고 있으면( long press, 롱 프레스 ) 나타내는 메뉴입니다.  화면 중앙에 나타나죠. 장식은 불가능하지만, Checkbox와 Radio 그룹 등의 설정이 가능하다는 장점이 있습니다.
 
 3. 서브 메뉴 : 팝업의 일종으로 화면 중앙에 나타납니다. 서브 메뉴 안에 또 서브 메뉴는 만들 수 없습니다.
 



메뉴 관련 APIs.


boolean onCreateOptionsMenu (Menu menu)
  : 최초 메뉴가 만들어질 때 한번만 호출.
  
MenuItem Menu.add (int groupId, int itemId, int order, CharSequence title)
MenuItem Menu.add (int groupId, int itemId, int order, int titleRes)
SubMenu Menu.addSubMenu (int titleRes)
 -> groupdId : 그룹 ID, 단일항목일때는 NONE(0)
 -> itemId : 항목의 고유 ID, 식별자이므로 중복 X
 -> order : 메뉴의 순서. NONE(0)일때는 추가된 순서대로
 -> title, titleRes : 메뉴 항목의 캡션 문자열 
 -> SubMenu도 add 메서드 호출 가능. 
 
MenuItem MenuItem.setIcon (int iconRes)
MenuItem MenuItem.setTitle (CharSequence title)
MenuItem MenuItem.setVisible (boolean visible)
MenuItem MenuItem.setAlphabeticShortcut (char alphaChar)
MenuItem MenuItem.setNumericShortcut (char numericChar)
MenuItem MenuItem.setChecked (boolean checked)
MenuItem MenuItem.setEnabled (boolean enabled)
MenuItem MenuItem.setVisible (boolean visible)

boolean onPrepareOptionsMenu (Menu menu)
  : 메뉴가 열릴 때마다 호출되므로 실행 중에 메뉴를 편집할 수 있다. (추가, 삭제, 속성 변경)

boolean onOptionsItemSelected (MenuItem item)
  : 메뉴 항목이 선택 되었을 때 호출된다.
    item.getItemId() 로 구분한다.




메뉴 관련 sample code


public boolean onCreateOptionsMenu(menu){
   super.onCreateOptionsMenu(menu);
   MenuItem item = menu.add(0, 1, 0, "1번")
   item.setIcon(R.drawable.icon);
   item.setNumericShortcut('1');
   menu.add(0, 2, 0, "2번").setIcon(R.drawable.icon);
   Submenu etc = menu.addSubMenu("기타");
   etc.add(0, 3, 0, "기타1");
   etc.add(0, 4, 0, "기타2");
 
  return true;
}
 
public boolean onOptionsItemSelected(MenuItem item){
  switch (item.getItemId()){
   case 1:
     // To Do
     return true;
  }
  return false;
}
  

 
 

xml을 통한 메뉴 정의


@ res/menu

 <menu
   xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:id="@+id/a"
            android:title="A"
            android:icon="@drawable/icon"
            android:alphabeticShortcut="a"/>
   <item android:id="@+id/submenu"
            android:title="기타">
            <menu>
                 <item android:id="@+id/c"
                          android:title="C"/>
             </menu>
   </item>
</menu>

 
@java

public boolean onCreateOptionsMenu (Menu menu){
  MenuInflater inflater = getMenuInflater().inflate(R.menu.menu, menu);
  return true;
}



 
 

Check ( or Radio ) 메뉴 만들기


: 위에서 설명 드렸다시피, 이녀석은 OptionMenu 에는 사용할 수 없습니다. Context 메뉴에 사용해야 합니다.

<xml>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/submenu"
           android:title="Submenu">
      <menu>
         <group android:id="@+id/check_group"
                     android:checkableBehavior="all">
                <item android:id="@+id/check1"
                        android:title="check1"/>
          </group>
          <group android:id="@+id/exclusive_check_group"
                      android:checkableBehavior="single">
                <item android:id="@+id/scheck1"
                         android:ttitle="S_check1"
                         android:checked="true"/>
                 <item android:id="@+id/schekc2"
                         android:title="S_check2"/>
           </group>
      </menu>
</menu>
 
<java>
public boolean onPrepareOptionsMenu(Menu menu){
  menu.findItem(R.id.check1).setChecked(true);
  menu.findItem(R.id.scheck1).setChecked(false);
}
 
public boolean onOptionsItemSelected(MenuItem item){
  switch (item.getItemId()){
    case R.id.check1:
       if (item.isChecked()){
          // To Do
       }
  }
}


 
 
 <참고 속성> 

checkableBehavior
  = none : 체크 할 수 없음
  = all : 항목 옆에 네모난 체크 박스, 항목 개별적 선택 가능
  = single : 그룹에 속한 항목 중 하나만 선택 가능, 동그란 버튼



 

 

Context Menu ( 컨텍스트 메뉴 )

 
<APIs> 

void Activity.registerForContextMenu (View view)
void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
boolean onContextItemSelected (MenuItem item)
void onCreateContextMenu(ContextMenu menu)



<example>

Button btn = (Button) findViewById(R.id.btn1);
registerForContextMenu(btn);
 
public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
   super.onCreateContextMenu(menu, v, menuInfo);
   if (v == btn){
       menu.setHeaderTitle("Button Menu");
       menu.add(0, 1, 0, "Context 1");
       menu.add(0, 2, 0, "Context 2");
   }
}
 
public boolean onContextItemSelected (MenuItem item){
    switch (item.getItemId()){
       case 1:
         // To Do
         return true;
    }
    return false;
}


 
 

로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글