메뉴가 완전히 다르다면 실행 중에 아예 메뉴 전체를 통째로 교체할 수 있다.
다음 메소드를 사용하면 다음번 메뉴를 열 때 onCreateOptionsMenu를 다시 호출한다.
void invalidateOptionsMenu()
다음은 초보와 전문가 모드일 때 다른 메뉴를 보여주는 예제이다.
다음은 초보자용 메뉴를 만들기 위한 xml파일이다.
menu/chobo.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.ch9_change_menu.ChangeMenu" >
<item android:title="도움말"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="always|withText"
/>
<item android:title="프로그램 소개"/>
</menu>
다음은 전문가용 메뉴를 만들기위한 xml파일이다.
menu/pro.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:title="검색"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always|withText"
/>
<item android:title="추가"
android:icon="@android:drawable/ic_menu_add"
android:showAsAction="always|withText"
/>
<item android:title="설정"/>
<item android:title="고급 기능" />
</menu>
화면에 버튼 2개를 두고 클릭시 메소드를 등록하기 위한 xml파일입니다.
layout/activity_change_menu.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/btnbeginner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="초보자 모드"
/>
<Button
android:id="@+id/btnpro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="전문가 모드"
/>
</LinearLayout>
자바 파일입니다.
ChangeMenu.java
package com.example.ch9_change_menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
public class ChangeMenu extends Activity {
boolean mBeginner = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_change_menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();//전개자 가져옴. xml로 메뉴를 정의하기위해
if(mBeginner){
inflater.inflate(R.menu.chobo, menu);//xml로 메뉴를 만드는 부분
}else{
inflater.inflate(R.menu.pro, menu);//xml로 메뉴를 만드는 부분
}
return true;
}
public void mOnClick(View v){
//버튼의 Id별로 메뉴를 다르게 하기위해
switch(v.getId()){
case R.id.btnbeginner:
mBeginner = true;
invalidateOptionsMenu();//여기서 onCreateOptionsMenu 메소드를 다시 부르게됨
break;
case R.id.btnpro:
mBeginner = false;
invalidateOptionsMenu();//여기서 onCreateOptionsMenu 메소드를 다시 부르게됨
break;
}
}
}
다음은 실행 화면입니다.
처음 초보자 모드일때.
전문가 버튼을 누른 후 메뉴가 바뀐 것을 알 수 있습니다. 이러한 기능은 태블릿에서 액션바를 바꿀 때 많이 쓰입니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - DatePicker 위젯을 이용한 날짜 입력 받기 (1) | 2015.08.08 |
---|---|
안드로이드 - 시간을 더욱 세련되게 표현하는 시계 위젯 만들기 (0) | 2015.08.08 |
안드로이드 - 날짜 시간 나타내기 (0) | 2015.08.08 |
안드로이드 - 프로그래스바의 확장형 시크바 (SeekBar) 만들기 (0) | 2015.08.08 |
안드로이드 - 실행 중에 메뉴 편집 (0) | 2015.08.08 |
안드로이드 - 프로그래스바(ProgressBar) 만들기 (0) | 2015.08.07 |
안드로이드 - 버튼에 팝업메뉴 만들기 (0) | 2015.08.02 |
안드로이드 - 뷰객체를 롱터치하면 나타나는 컨텍스트 메뉴 (0) | 2015.08.02 |