관리 메뉴

드럼치는 프로그래머

[안드로이드] XML로 메뉴만들기 - 메뉴항목을 보이고 안보이게 하기 본문

★─Programing/☆─Android

[안드로이드] XML로 메뉴만들기 - 메뉴항목을 보이고 안보이게 하기

드럼치는한동이 2011. 7. 20. 09:14

안녕하세요?
프쟁이 입니다.


메뉴항목을 처음에 안보이게 했다가, 프로그램을 사용하면서,


특정 조건이나, 조작을 했을때 다시 보이게 했다가, 다시 숨기는 등의


처리를 하는 경우가 있을 수 있습니다.


먼저 /res/menu/menuTemplate.xml 파일을 만드시고, 아래와 같이 입력합니다.


<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/visible_item"
        android:title="Visible"
        android:alphabeticShortcut="a" />

    <item android:id="@+id/hidden_item"
        android:title="Hidden"
        android:visible="false"
        android:alphabeticShortcut="b" />

    <group android:id="@+id/hidden_group"
        android:visible="false">
   
        <item android:id="@+id/hidden_by_group"
            android:title="Hidden by group"
            android:alphabeticShortcut="c" />
   
    </group>

</menu>


먼저 menu 루트태그안에 item 태그가 세개가 있지만,


두번째 item 태그의 속성이 android:visible="false"로 되어있고,


세번째 item태그를 감싸는 group태그의 속성이


android:visible="false" 로 되어있어서, 첫번째 item 태그의


메뉴항목만 메뉴를 표시했을때 보이게 됩니다.


이제 액티비티 자바파일을 만드시고, 다음과 같이 입력합니다.


public class 액티비티클래스명 extends Activity {

    /*
      메뉴를 생성할때, 생성한 메뉴를 저장했다가,
      메뉴항목을 선택했을때 호출되는 메소드에서,
      메뉴에서 가져와야할 정보들을 이 변수에서
      가져와서 처리를 하게됩니다.
    */
    Menu mMenu;

    /*
     스마트폰 하단의 메뉴버튼을 눌렀을때 호출되는 함수입니다.
     반환값을 false 로 하시면, 스마트폰 하단의 메뉴버튼을 눌렀을때,
     메뉴가 안나오게 됩니다. true 를 리턴하셔야 메뉴가 나옵니다.
    */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        mMenu = menu;

        MenuInflater inflater = getMenuInflater();
        //위에서 만들었던 xml 파일의 리소스아이디값을 넘겨줍니다.
        inflater.inflate(R.menu.menuTemplate, menu);

        return true;
    }

    /*
      메뉴항목을 선택했을때, 호출되는 함수입니다.
    */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        //각 체크박스 메뉴항목별로 선택했을때 처리..
        switch (item.getItemId()) {
          case R.id.visible_item: // 메뉴 xml 파일에서 정의한 id속성값 입니다.
            //메뉴항목선택시 처리내용...

            /*
              메뉴객체의 findItem 메소드에 메뉴항목의 리소스아이디값을 넘겨서,
              메뉴항목객체를 구하고(MenuItem), 그 메뉴항목의 isVisible() 메소드로
              현재 보이는지 안보이는지 true/false 값을 가져와서,
              그룹안의 모든 item 메뉴항목들을 보이고, 안보이게 해주는 메뉴객체의
              setGroupVisible(..) 메소드를 호출하여, 해당 그룹안의 모든 메뉴항목들을
              보이고 안보이게 컨트롤 할 수 있습니다.
            */
            final boolean is_visible = !mMenu.findItem(R.id.hidden_item).isVisible();
            mMenu.setGroupVisible(R.id.hidden_group, is_visible);

            break;

          case R.id.hidden_item: // 메뉴 xml 파일에서 정의한 id속성값 입니다.
            //메뉴항목선택시 처리내용...
            break;

          case R.id.hidden_by_group: // 메뉴 xml 파일에서 정의한 id속성값 입니다.
            //메뉴항목선택시 처리내용...
            break;

        }
       
        return true;
    }

}


그럼 모두 즐프하세요. ^^


Comments