티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
안드로이드용 어플리케이션을 사용하다보면 메뉴 버튼을 터치했을 때 화면의 하단에 메뉴가 띄워지는
것을 볼 수 있습니다. 예를 들면 인터넷 어플리케이션에서 "새 창" 을 여는 기능이나 "새로 고침" 을 하는
기능 등은 이 메뉴로 구성되어 있습니다. 이러한 기능은 특정 뷰가 할 수 있는 작업을 구성하는 Context
Menu 와는 달리 현재 화면에 보여지고 있는 액티비티 자체에 대한 부가 기능을 메뉴화한 것입니다.
이처럼 어플리케이션의 액티비티 단위로 부가 기능을 구성하여 제공하는 것을 Options Menu 라고
합니다. 이번 강좌에서는 Options Menu 를 사용하는 방법에 대하여 구체적으로 알아보도록 하겠습니다.
Menu 에 대한 기초 지식과 기본 XML 키워드에 대해서 잘 모르시는 분은 먼저 아래의 링크를 참고하여
주시기 바랍니다.
Context Menu 와 Sub Menu에 대하여 알고싶으신 분은 아래의 링크를 참고하여 주시기 바랍니다.
메뉴( Menu ) - Context Menu : http://www.tipssoft.com/bulletin/tb.php/FAQ/982
1. Options Menu 의 특징
Options Menu 는 기본적으로 아래의 좌측 그림과 같은 형태를 가집니다. 이 메뉴는 화면의 일부분을
사용하여 출력하기때문에 출력할 수 있는 항목의 수가 6개로 한정됩니다. 그래서 6개를 초과하는
항목으로 메뉴를 구성하게되면 좌측의 그림처럼 5개까지만 정상적으로 출력되고, 6번째 항목에는
"더보기" 항목이 추가되며 이 항목을 터치하면 우측의 그림처럼 보여지지 못한 항목들이 리스트
형태로 출력됩니다.
또한 위의 좌측 그림처럼 기본 메뉴에 출력되는 항목들은 아이콘을 추가적으로 사용할 수 있으므로
항목의 특성과 어울리는 아이콘을 잘 선택하여 설정해주는 것이 좋습니다.
2. XML 로 리소스 구성하기
메뉴를 XML 형식으로 구성할 때에는 res 폴더에 menu 폴더를 생성한 후에 메뉴를 구성할 XML
파일을 생성해주어야 합니다. XML 파일 내부에는 자신이 사용할 메뉴를 XML 코드를 이용하여
구성해 주어야 합니다. 아래의 코드는 7개의 항목을 구성하는 XML 코드입니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- menu_1 에서 menu_5 까지는 아이콘을 설정하면 메뉴에 적용된다. -->
<item android:id="@+id/menu_1"
android:icon="@drawable/icon"
android:title="tipssoft"
/>
<item android:id="@+id/menu_2"
android:icon="@drawable/icon"
android:title="tipsware"
/>
<item android:id="@+id/menu_3"
android:icon="@drawable/icon"
android:title="StagePia"
/>
<item android:id="@+id/menu_4"
android:title="StageDMX"
/>
<item android:id="@+id/menu_5"
android:title="HandyPHP"
/>
<item android:id="@+id/menu_6"
android:title="Android"
/>
<!-- menu_7 은 기본 메뉴에서 출력되는 항목이 아니므로 아이콘을 설정해도 적용되지 않는다. -->
<item android:id="@+id/menu_7"
android:icon="@drawable/icon"
android:title="Droid"
/>
</menu>
2. 소스 코드로 기능 구현하기
XML 형식으로 구성한 메뉴를 어플리케이션에 띄우고 메뉴의 각 항목에 자신이 원하는 작업을
설정하기 위해서는 아래와 같은 작업들을 수행해주어야 합니다.
2.1 메뉴 등록하기
액티비티에서 메뉴 버튼을 눌러서 Options Menu 가 출력되어야 할 때 처음 메뉴가 출력되는
단 한번만 시스템에 의해 onCreateOptionsMenu 콜백 메소드가 호출됩니다. 이 때 XML 형식으로
구성된 메뉴를 시스템이 사용 가능한 Options Menu 로 재구성해주어야 합니다.
아래의 코드처럼 onCreateOptionsMenu 메소드에서는 메뉴를 재구성할 수 있도록 하는
MenuInflater 객체를 얻어서 사용자가 정의한 XML 메뉴가 시스템에서도 사용될 수 있도록
재구성하는 작업을 합니다.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 액티비티에서 XML 형식으로 구성된 메뉴를 실제 사용 가능한 Options Menu 로
// 재구성하게 해주는 MenuInflater 객체를 얻는다.
MenuInflater inflater = getMenuInflater();

// XML 형식으로 구성된 메뉴를 사용 가능한 Options Menu 로 재구성한다.
inflater.inflate(R.menu.sample_menu, menu);
return true;
}
Context Menu 는 메뉴가 보여질 때마다 onCreateContextMenu 메소드가 호출되는 반면에
Options Menu 는 메뉴가 처음 보여질 때 단 한번만 onCreateOptionsMenu 메소드가 호출됩니다.
그래서 실행중에 항목의 상태를 변경하거나 항목을 추가/제거/변경하고 싶다면 Options Menu 가
보여질 때마다 호출되는 onPrepareOptionsMenu 콜백 메소드를 재정의하여 사용해야 합니다.
2.2 사용자 조작 처리하기
Options Menu 에서 특정 항목이 선택되면 시스템은 onOptionsItemSelected 콜백 메소드를
호출합니다. 그렇기 때문에 메뉴가 선택되었을 때 프로그래머가 원하는 일을 정의하려면 해당
콜백 메소드를 재정의 해야합니다. 해당 메소드의 매개 변수인 MenuItem 는 선택한 항목 정보에
접근할 수 있는 인터페이스로 해당 객체를 이용해서 항목의 여러가지 정보를 얻을 수 있습니다.
아래의 코드는 메뉴에서 선택한 항목명을 텍스트뷰에 출력하도록 재정의한 것입니다.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 텍스트뷰를 얻는다.
TextView tv = (TextView) findViewById(R.id.id_tv);
switch (item.getItemId()) {
case R.id.menu_1:
case R.id.menu_2:
case R.id.menu_3:
case R.id.menu_4:
case R.id.menu_5:
// 기본 메뉴 화면에 보이는 항목들이 선택된 경우 아래와 같이 항목명을 출력한다.
tv.setText("Main Select Menu : " + item.getTitle());
// 메뉴의 선택 처리가 완료되면 true 를 반환한다.
return true;
case R.id.menu_6:
case R.id.menu_7:
// "더보기(혹은 More)" 항목을 선택했을 때 출력되는 리스트 메뉴의 항목들이
// 선택된 경우 아래와 같이 항목명을 출력한다.
tv.setText("More Select Menu : " + item.getTitle());
return true;
default :
// 사용자가 선택에 대한 처리를 완료하지 못하면 false 를 반환해도 되지만
// 바로 false 를 반환하지 않고, 슈퍼 클래스의 onOptionsItemSelected메소드를
// 하여 해당 메소드가 반환하는 반환값을 반환해주는 것이 좋습니다.
return super.onOptionsItemSelected(item);
}
}
3. 실행 화면
Options Menu 는 메뉴 버튼을 눌렀을 때 화면의 하단에 최대 6개까지 출력됩니다. 이 강좌에서
다룬 예제는 항목이 6개를 초과하므로 아래의 그림처럼 6번째에 "더보기" 가 추가됩니다.
또한 XML 파일을 구성할 때 출력될 5개의 항목중에서 3개만 아이콘을 설정하였으므로, 나머지
2개의 항목은 문자열만 출력됩니다.
"더보기" 버튼을 터치한 경우 아래 좌측의 그림처럼 나머지 항목들이 리스트의 형태로 출력됩니다.
항목을 선택하면 선택한 항목의 문자열이 텍스트뷰에 출력됩니다.

 

'프로그램 > 안드로이드 강좌' 카테고리의 다른 글

탭 레이아웃(Tab Layout) 사용하기 - Intent 방식1  (0) 2012.08.15
메뉴 서브 메뉴  (0) 2012.08.15
Context 메뉴  (0) 2012.08.15
메뉴기초  (0) 2012.08.15
터치를 이용한 간단한 게임  (0) 2012.08.15
댓글