본문 바로가기
Android

[깡샘의 안드로이드 프로그래밍] 정리 14 - MenuInflater

by 들풀민들레 2018. 1. 5.
본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

 

 

12장.  ActionBar 와 Menu

 

12.3.2. MenuInflater 활용

 

onCreateOptionsMenu ( ) 혹은 onPrepareOptionsMenu ( ) 함수 내에서 자바 코드를 이용해 다양한 메뉴를 구성할 수 있습니다. 

그런데 액티비티가 실행될 때마다 다르지 않고 항상 똑같다면 코드에서 작업하지 않고 리소스 XML을 이용하여 메뉴를 구현하는 방법도 있습니다. XML을 만들고 리소스화해서 메뉴를 구현하는 방법입니다. 

 

메뉴 XML 파일이 저장될 위치는 res 폴더 하위의 menu 폴더입니다.

 

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

<item

android:id="@+id/menu1"

android:icon="@drawable/ic_menu_1"

android:title="선택..." />

<item

android:id="@+id/menu2"

android:icon="@drawable/ic_menu_2"

android:title="레이아웃" />

</menu>

 

자바 코드에서 작성했던 메뉴 구성을 XML로 작성하였습니다. 이렇게 XML을 만들고 액티비티에 메뉴를 적용하려면 자바 코드에서 MenuInflater를 이용합니다.

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater=getMenuInflater();

inflater.inflate(R.menu.menu_main, menu);

return true;

}

 

이처럼 메뉴를 XML로 정의하면 각 메뉴의 <item> 태그에 메뉴를 식별하기 위한 id 값을 R 파일을 통해 등록하게 되며, 자바 코드에서 메뉴를 식별할 때R 파일의 int 변수로 식별해서 이벤트를 처리하면 됩니다.

 

@Override

public boolean onOptionsItemSelected(MenuItem item) {

if(item.getItemId()==R.id.menu1){

//...

}else if(item.getItemId()==R.id.menu2){

//...

}

return super.onContextItemSelected(item);

}