프로그래밍/안드로이드

안드로이드 - XML로 메뉴 정의하기

가카리 2015. 8. 1. 18:56
반응형

2. XML로 메뉴정의 하기


메뉴가 아주 많을경우 코드로 일일이 속성을 설정하는 것은 상당히 힘드므로


하나의 XML파일로 작성하는 것이 훨씬더 유리하다.


메뉴의 모양을 정의하는 것은 res/menu 폴더에 작성한다.



이클립스가 만들어준 xml파일에 메뉴 항목 하나에 대응되는 <item> 엘리먼트나 항


목의 그룹에 해당하는 <group> 엘리먼트를 채워 넣고 속성을 적당히 편집하여 메


뉴를 디자인한다.


속성

설명

id

코드에서 메뉴항목을 칭할 이름을 지정한다

title

메뉴 항목의 제목 문자열이다.

titleCondensed

제목이 너무길어 화면에 표시하기 어려울때 대신 사용되는 짧은 제목

icon

메뉴 항목에 같이 표시할 이미지 지정

onClick

메뉴 항목 선택시 호출할 메서드

showAsAction

항목을 액션바에 배치하는 방식을 지정

visible

항목을 보일것인지

enabled

항목을 선택할 수 있는지를 지정

checkable

항목의 체크할 수 있는지를 지정

checked

항목의 체크 상태를 지정



menu.xml 파일


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

    xmlns:tools="http://schemas.android.com/tools"

    tools:context="com.example.ch9_xml_menu.MainActivity" >


    <item android:id="@+id/jjajang"

        android:title="짜장"

        android:icon="@drawable/ic_launcher"

     />

    <item android:id="@+id/jjambbong"

        android:title="짬뽕"

        android:icon="@drawable/ic_launcher"

     />

    <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>



XML 리소스로 정의한 메뉴를 생성할 때는 전개 기법을 사용한다.


메뉴 전개자인 MenuInflater 객체를 구하고 이 객체의 inflate 메서드를 호출하여 리소스의 메뉴를 실제 메뉴로 전개한다.


전개란 XML문서에 정의된 레이아웃과 차일드 뷰의 속성을 읽어 실제 뷰 객체를 생성하는 동작을 말한다.


MenuInflater Activity.getMenuInflater()

void inflate(int menuRes, Menu menu)


첫번째 인수로 메뉴의 리소스 ID를 전달하고 두번째 인수로 전개된 메뉴를 담을 메뉴 객체를 전달한다.




다음은 예제 소스이다.


MainActivity.java


package com.example.ch9_xml_menu;


import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import android.widget.TextView;

import android.widget.Toast;


public class MainActivity extends Activity {


        @Override

        protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        TextView MyText = new TextView(this);

        MyText.setText("메뉴 키를 누르세요.");

        setContentView(MyText);

        }


        @Override

        public boolean onCreateOptionsMenu(Menu menu) {

        super.onCreateOptionsMenu(menu);

        MenuInflater inflater = getMenuInflater();//인플레이터를 쓰려면 일단 이걸 해야됨

        inflater.inflate(R.menu.main, menu);//그다음 사용가능 첫번째인자는 xml파일리소스 두번째는 menu객체

        

        return true;

        }


        @Override

        public boolean onOptionsItemSelected(MenuItem item) {

        switch(item.getItemId()){//선택된 아이디값 받아오고

        

        //아래 case문을 통해서 어떤게 클릭됬는지 확인후 토스트 메시지 출력

        case R.id.jjajang:

        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;

        }

}


결과 화면





반응형