프로그래밍/안드로이드

안드로이다 - 실행 중에 메뉴를 교체하기

가카리 2015. 8. 8. 00:36
반응형

메뉴가 완전히 다르다면 실행 중에 아예 메뉴 전체를 통째로 교체할 수 있다.

 

다음 메소드를 사용하면 다음번 메뉴를 열 때 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;

        }

    }

    

}

 

 

다음은 실행 화면입니다.

처음 초보자 모드일때.

 

전문가 버튼을 누른 후 메뉴가 바뀐 것을 알 수 있습니다. 이러한 기능은 태블릿에서 액션바를 바꿀 때 많이 쓰입니다.