[Android] 안드로이드 - 옵션 메뉴 (Option Menu) 구현 방법
안드로이드에서 옵션 메뉴(Option Menu)는 앱의 우측 상단에 배치되는 메뉴키를 통해 동작시킬 수 있습니다. 옵션 메뉴(Option Menu)는 리스트 형식의 다이얼로그로 여러 개의 메뉴 항목을 추가할 수 있고 각 메뉴 항목은 하위 메뉴를 포함하는 것도 가능합니다.
1. 액티비티(Activity)에 옵션 메뉴(Option Menu) 추가하기
▼ 옵션 메뉴(Option Menu)를 추가하는 과정은 먼저 /res/menu/ 경로에 Menu Resource를 위해 XML 파일을 생성합니다. /res/ 경로 밑에 menu Directory가 존재하지 않으면 추가를 하여 해당 Directory 하위에 XML 파일을 생성해줍니다.
▼ Activity의 onCreateOptionsMenu() 함수를 오버라이딩 합니다. 해당 함수는 액티비티(Activity)가 시작될 때 호출되는 함수로 액티비티 Life Cycle 내에서 단 한 번만 호출되기 때문에 이 안에서 MenuItem 생성과 초기화를 하면 됩니다. 해당 함수에서는 Menu Inflater를 통하여 XML Menu 리소스에 정의된 내용을 파싱 하여 Menu 객체를 생성하고 추가를 하게 됩니다.
▼ Activity의 onPrepareOptionsMenu() 함수는 추가 한 옵션 메뉴(Option Menu)를 클릭할 때마다 호출이 됩니다. 메뉴를 클릭하였을 때 따로 처리해야 할 내용이 있다면 이 함수안에 구현하면 됩니다.
▼ Activity의 onOptionsItemSelected() 함수는 옵션 메뉴(Option Menu)에서 특정 Menu Item을 선택하였을 때 호출되는 함수입니다. 매개변수로 선택 된 MenuItem의 객체가 넘어옵니다.
▼ Activity의 onOptionsMenuClosed() 함수는 옵션 메뉴(Option Menu)를 클릭하여 활성화 된 상태에서 이전 버튼을 클릭하거나 액티비티의 다른 영역을 클릭하여 옵션 메뉴를 닫을 때 호출되는 함수입니다.
2. 옵션 메뉴(Option Menu) 구현 예제
먼저 MenuItem 구성을 위한 메뉴 XML 리소스를 작성합니다. 해당 리소스 파일은 /res/menu/main_menu.xml 위치합니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu1"
android:title="Menu1" />
<item
android:id="@+id/menu2"
android:title="Menu2" />
<item
android:id="@+id/menu3"
android:title="Menu3" />
</menu>
다음은 해당 옵션 메뉴(Option Menu)가 추가되는 액티비티(Activity)를 실행하기 위한 자바 소스입니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item)
{
Toast toast = Toast.makeText(getApplicationContext(),"", Toast.LENGTH_LONG);
switch(item.getItemId())
{
case R.id.menu1:
toast.setText("Select Menu1");
break;
case R.id.menu2:
toast.setText("Select Menu2");
break;
case R.id.menu3:
toast.setText("Select Menu3");
break;
}
toast.show();
return super.onOptionsItemSelected(item);
}
}
▼ onCreateOptionsMenu() 와 onOptionsItemSelected() 함수를 오버라이딩 하였습니다.
■ onCreateOptionsMenu()
onCreateOptionsMenu() 함수는 액티비티가 시작할 때 한번만 호출되는 함수이기 때문에 Menu와 관련된 초기 설정과 같은 작업이 이루어지는 함수입니다. 위 예제에서는 getMenuInflater()를 통해 MenuInflater 객체를 얻어와 MenuInflater의 Inflate() 함수를 호출합니다. 넘겨주는 인자는 첫 번째는 Menu 리소스 ID가 넘어가고 두 번째 인자는 Menu 객체를 넘겨주게 됩니다.
■ onOptionsItemSelected()
onOptionsItemSelected() 함수는 MenuItem이 선택되었을 때 호출되는 함수입니다. 예제에서는 switch~case 문을 통해 선택된 MenuItem의 ID를 이용해 Toast 메시지의 Text를 지정하고 있습니다.
3. 참조
■ 안드로이드 개발자 참조 문서
Menu Resource 관련 참조 문서
https://developer.android.com/guide/topics/resources/menu-resource
Menu 관련 참조 문서
https://developer.android.com/guide/topics/ui/menus?hl=ko#options-menu
■ 참조하면 좋은 포스팅
[Android] 안드로이드 - setContentView()와 레이아웃 전개자(LayoutInflater)
'안드로이드 > 메뉴(Menu)' 카테고리의 다른 글
[Android] 안드로이드 - 네비게이션 드로어(Navigation Drawer)를 활용하여 슬라이드 메뉴 구현하기 (0) | 2021.12.06 |
---|---|
[Android] 안드로이드 - 컨텍스트 메뉴(Context Menu) 사용 예제 (0) | 2021.12.02 |