안드로이드 메뉴 #1 옵션 메뉴와 컨텍스트 메뉴 그리고 서브메뉴 : Android Menu #1 OptionMenu , ContextMenu And SubManenu
728x90
반응형
안드로이드 메뉴의 종류와 기능에 대해서 알아본다.
※ 버전 : Android SDK 2.3.1
안드로이드 메뉴의 종류와 기능에 대해서 알아보자. 안드로이드에서 제공하는 메뉴는 그다지 세련되지 않지만, 일반적으로 사용할때 무난하다고 생각된다. 메뉴에는 3가지 종류가 있다.
1. 옵션 메뉴 : 화면 아래쪽에 숨겨있으며 모바일기기 메뉴버튼을 누르면 위로 나타나게 된다. 최대 6개의 메뉴 항목을 가질수 있으며, 5개까지만 해당 메뉴가 노출되고 6개 이상인 경우 MORE 항목에 숨겨지게 된다. 메뉴 항목에는 아이콘으로 장식할 수 있지만, 체크박스나 라디오 그룹으로 구성할 수 없다.
2. 컨텍스트 메뉴 : 모바일기기 화면을 일정시간 동안 누르고 있거나 홈 버튼을 누르고 있으면 화면 중앙에 나타나는 메뉴이다. 주로 리스트 뷰의 항목에 대해 사용한다. 아이콘으로 장식할 수 없지만, 체크박스나 라디오 그룹으로 구성할 수 있다.
3. 서브 메뉴 : 메뉴 항목을 가지는 일종의 팝업이며 화면 가운데에 나타난다.옵션 메뉴나 컨텍스트 메뉴에 더 많은 항목을 넣을 수 있는 역활을 한다. 단 서브 메뉴안에 서브 메뉴를 구성할 수 없다.
※ 메서드 설명 : 소스 이해를 돕기위해 설명이므로, 아래의 소스를 분석할때 참조하자.
> boolean onCreateOptionsMenu (Menu menu)
모바일기기의 Menu 를 선택하면 호출되는 메서드
> boolean onOptionsItemSelected (MenuItem item)
메뉴 항목이 선택되었을 때 호출되는 메서드
> MenuItem add (int groupId, int itemId, int order, CharSequence title)
> MenuItem add (int groupId, int itemId, int order, int titleRes)
하나의 메뉴 항목을 추가한다.
groupId : 여러 개의 메뉴 항목을 그룹으로 구성할 때 지정한다.
itemId : 메뉴 항목의 고유ID를 지정한다. 선택된 메뉴 항목이 무엇인지 알 수 있게된다.
order : 메뉴 항목의 순서를 지정한다.
titleRes , title : 메뉴 항목을 타이틀을 지정한다.
> SubMenu addSubMenu (int titleRes)
메뉴 항목 아래 서브 메뉴를 구성할때 사용한다.
> 메뉴 항목의 메서드 속성 설명 : xml 에서 사용할때는 set 을 지우고, 첫글자를 대문자로 속성을 지정하여 사용할 수 있다.
setIcon (int iconRes) : 아이콘 지정
setTitle (CharSequence) : 타이틀 지정
setVisible (boolean visible) : 노출여부 지정
setAlphabeticShortcut (char alphaChar) : 알파벳 단축키
setNumbericShortcut (char numericChar) : 숫자 단축키
setChecked (boolean checked) : 체크여부 지정
setEnabled (boolean enabled) : 잠금여부 지정
※ 버전 : Android SDK 2.3.1
안드로이드 메뉴의 종류와 기능에 대해서 알아보자. 안드로이드에서 제공하는 메뉴는 그다지 세련되지 않지만, 일반적으로 사용할때 무난하다고 생각된다. 메뉴에는 3가지 종류가 있다.
1. 옵션 메뉴 : 화면 아래쪽에 숨겨있으며 모바일기기 메뉴버튼을 누르면 위로 나타나게 된다. 최대 6개의 메뉴 항목을 가질수 있으며, 5개까지만 해당 메뉴가 노출되고 6개 이상인 경우 MORE 항목에 숨겨지게 된다. 메뉴 항목에는 아이콘으로 장식할 수 있지만, 체크박스나 라디오 그룹으로 구성할 수 없다.
2. 컨텍스트 메뉴 : 모바일기기 화면을 일정시간 동안 누르고 있거나 홈 버튼을 누르고 있으면 화면 중앙에 나타나는 메뉴이다. 주로 리스트 뷰의 항목에 대해 사용한다. 아이콘으로 장식할 수 없지만, 체크박스나 라디오 그룹으로 구성할 수 있다.
3. 서브 메뉴 : 메뉴 항목을 가지는 일종의 팝업이며 화면 가운데에 나타난다.옵션 메뉴나 컨텍스트 메뉴에 더 많은 항목을 넣을 수 있는 역활을 한다. 단 서브 메뉴안에 서브 메뉴를 구성할 수 없다.
※ 메서드 설명 : 소스 이해를 돕기위해 설명이므로, 아래의 소스를 분석할때 참조하자.
> boolean onCreateOptionsMenu (Menu menu)
모바일기기의 Menu 를 선택하면 호출되는 메서드
> boolean onOptionsItemSelected (MenuItem item)
메뉴 항목이 선택되었을 때 호출되는 메서드
> MenuItem add (int groupId, int itemId, int order, CharSequence title)
> MenuItem add (int groupId, int itemId, int order, int titleRes)
하나의 메뉴 항목을 추가한다.
groupId : 여러 개의 메뉴 항목을 그룹으로 구성할 때 지정한다.
itemId : 메뉴 항목의 고유ID를 지정한다. 선택된 메뉴 항목이 무엇인지 알 수 있게된다.
order : 메뉴 항목의 순서를 지정한다.
titleRes , title : 메뉴 항목을 타이틀을 지정한다.
> SubMenu addSubMenu (int titleRes)
메뉴 항목 아래 서브 메뉴를 구성할때 사용한다.
> 메뉴 항목의 메서드 속성 설명 : xml 에서 사용할때는 set 을 지우고, 첫글자를 대문자로 속성을 지정하여 사용할 수 있다.
setIcon (int iconRes) : 아이콘 지정
setTitle (CharSequence) : 타이틀 지정
setVisible (boolean visible) : 노출여부 지정
setAlphabeticShortcut (char alphaChar) : 알파벳 단축키
setNumbericShortcut (char numericChar) : 숫자 단축키
setChecked (boolean checked) : 체크여부 지정
setEnabled (boolean enabled) : 잠금여부 지정
커스텀 뷰 메뉴 만들기
> 1-1. 커스텀 뷰 만들기
package com.syaku; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class AndroidMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 커스텀뷰 선언 TextView view = new TextView(this); view.setText("메뉴를 입력하세요."); // 뷰에 텍스트를 출력한다. setContentView(view); // 뷰 반영 } }
> 1-2. 메뉴 만들기
커스텀 뷰에 아래의 메소드와 임포트를 넣어 주면 된다. 어플을 실행하고 menu 버튼(모바일기기)을 눌러야 메뉴가 활성화된다.
쇼컷(단축키)도 메뉴가 활성화된 후에 "a" 키를 누르면 작동한다.
import android.view.*; // Menu 클래스를 임포트해야함. public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // 부모 에도 매개변수 지정 // int group_id , int itemId , int order , CharSequence title or int titleRes MenuItem item = menu.add(0, 1,0,"짜장"); // 짜장 메뉴항목 생성 item.setIcon(R.drawable.icon); // 아이콘 적용 item.setAlphabeticShortcut('a'); // 단축키 적용 menu.add(0,2,0,"짬뽕").setIcon(R.drawable.icon); // 두번째 메뉴항목을 생성하고 아이코 적용 SubMenu etc = menu.addSubMenu("기타"); // 세번째 기타 서브메뉴 생성 etc.add(0,3,0,"우동"); etc.add(0,4,0,"만두"); return true; }
> 2. 메뉴 항목에 기능 부여하기
메뉴의 마무리 작업이다. 각 메뉴를 선택하게 되면 토스트를 이용하여 알림메세지가 출력되도록 해보자.
package com.syaku; import android.app.Activity; import android.os.Bundle; import android.widget.*; // Toast 함께 임포트하기. import android.view.*; // Menu 클래스를 임포트해야함. public class AndroidMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 커스텀뷰 선언 TextView view = new TextView(this); view.setText("메뉴를 입력하세요."); // 뷰에 텍스트를 출력한다. setContentView(view); // 뷰 반영 } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // 부모 에도 매개변수 지정 // int group_id , int itemId , int order , CharSequence title or int titleRes MenuItem item = menu.add(0, 1,0,"짜장"); // 짜장 메뉴항목 생성 item.setIcon(R.drawable.icon); // 아이콘 적용 item.setAlphabeticShortcut('a'); // 단축키 적용 menu.add(0,2,0,"짬뽕").setIcon(R.drawable.icon); // 두번째 메뉴항목을 생성하고 아이코 적용 SubMenu etc = menu.addSubMenu("기타"); // 세번째 기타 서브메뉴 생성 etc.add(0,3,0,"우동"); etc.add(0,4,0,"만두"); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(this,"짜장면은 손짜장이 최고",Toast.LENGTH_SHORT).show(); return true; case 2: Toast.makeText(this,"짬뽕은 뽕의전설이 최고",Toast.LENGTH_SHORT).show(); return true; case 3: Toast.makeText(this,"우동 !!!!!!!!!!!! 너머거",Toast.LENGTH_SHORT).show(); return true; case 4: Toast.makeText(this,"만두는 서비스!!!",Toast.LENGTH_SHORT).show(); return true; } return false; } }
리소스(XML)를 이용해 메뉴 만들기
리소스를 이용한 메뉴만들기는 이전에 했던 메뉴만들기에서 xml 리소스만 추가된 부분이라, 이전 예제소스를 이해했다면 쉽게 넘어갈 수 있는 부분이다.
> 리소스 만들기
메뉴의 리소스를 만들기 위해 res/menu/menu.xml 파일을 생성한다.
이클립스에서 xml 파일을 만들때에는 왼쪽 트리메뉴에서 menu 폴더를 생성하고 폴더 오른쪽 마우스를 클릭한다.
New > Other > Android : Andorid XML File 를 선택한다.
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/jjajang" android:title="짜장" android:icon="@drawable/icon" android:alphabeticShortcut="a" /> <item android:id="@+id/jjambbong" android:title="짬뽕" android:icon="@drawable/icon" /> <item android:id="@+id/submenu" android:title="기타"> <menu> <item android:id="@+id/udong" android:title="우동" /> <item android:id="@+id/mandoo" android:title="만두" /> </menu> </item> </menu>
> 리소스를 어플리케이션에 반영하기
package com.syaku; import android.app.Activity; import android.os.Bundle; import android.widget.*; // Toast 함께 임포트하기. import android.view.*; // Menu 클래스를 임포트해야함. public class AndroidMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 커스텀뷰 선언 TextView view = new TextView(this); view.setText("메뉴를 입력하세요."); // 뷰에 텍스트를 출력한다. setContentView(view); // 뷰 반영 } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // 부모 에도 매개변수 지정 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); // 리소스 메뉴 적용 return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.jjajang: // 짜장 id 리소스인 경우 Toast.makeText(this,"짜장면은 손짜장이 최고",Toast.LENGTH_SHORT).show(); return true; case R.id.jjambbong: Toast.makeText(this,"짬뽕은 뽕의전설이 최고",Toast.LENGTH_SHORT).show(); return true; case R.id.udong: Toast.makeText(this,"우동 !!!!!!!!!!!! 너머거",Toast.LENGTH_SHORT).show(); return true; case R.id.mandoo: Toast.makeText(this,"만두는 서비스!!!",Toast.LENGTH_SHORT).show(); return true; } return false; } }
내용이 길어지는 관계로 #1은 여기서 마무리하고,
#2에서 좀 더 액티브한 기능을 가지 메뉴를 만들어보도록 하자.
> 메뉴를 선택하면 메뉴 항목이 아래에서 노출된다.
노출된 메뉴를 선택하면 알림 메세지가 출력된다. 기타를 누르게 되면 아래와 같은 서브 메뉴가 호출된다.
728x90
반응형
'개발노트 > 안드로이드 SDK' 카테고리의 다른 글
안드로이드 스레드 XML 리스트 뷰 (1) : Android XML ListView Adapter Http AsyncTask (6) | 2013.10.24 |
---|---|
안드로이드 메뉴 #2 옵션 메뉴와 컨텍스트 메뉴 그리고 서브메뉴 : Android Menu #2 OptionMenu , ContextMenu And SubManenu (0) | 2011.06.12 |
안드로이드 응용프로그램 자원관리 : Android Application Resource (2) | 2010.04.29 |
안드로이드 Hello World 응용프로그램 : Android Application (20) | 2010.03.11 |