앱 바에서 사용자 작업의 버튼을 추가할 수 있습니다. 이 기능을 활용하면 현재 컨텍스트에 가장 중요한 작업을 앱 상단에 바로 배치할 수 있습니다. 예를 들어 사진 탐색 앱의 경우 사용자가 사진 롤을 볼 때 상단에 공유 및 앨범 만들기 버튼이 표시되고 사용자가 개별 사진을 볼 때 자르기 및 필터 버튼이 표시될 수 있습니다.
앱 바의 공간은 한정되어 있습니다. 앱이 선언한 작업이 앱바에 들어갈 수 있는 것보다 더 많은 경우 앱바는 초과 작업을 더보기 메뉴에 보냅니다. 앱은 특정 작업이 앱바가 아니라 더보기 메뉴에 항상 표시되도록 지정할 수도 있습니다.

그림 1. 작업 버튼 하나와 더보기 메뉴가 있는 앱바
작업 버튼 추가
모든 작업 버튼과 작업 오버플로에서 사용할 수 있는 다른 항목은 XML 메뉴 리소스에서 정의됩니다. 작업 모음에 작업을 추가하려면 프로젝트의 res/menu/
디렉터리에 새 XML 파일을 만듭니다.
작업 모음에 포함할 각 항목의 <item>
요소를 추가합니다. 메뉴 XML 파일의 다음 코드 예를 참고하세요.
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- "Mark Favorite", should appear as action button if possible --> <item android:id="@+id/action_favorite" android:icon="@drawable/ic_favorite_black_48dp" android:title="@string/action_favorite" app:showAsAction="ifRoom"/> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> </menu>
app:showAsAction
속성은 작업을 앱 바에서 버튼으로 표시할지 여부를 지정합니다. app:showAsAction="ifRoom"
을 설정하면(위 코드 예의 favorite 작업에서와 같이) 작업은 앱 바에 공간이 있는 경우 버튼으로 표시됩니다. 공간이 충분하지 않으면 초과 작업이 더보기 메뉴로 보내집니다. app:showAsAction="never"
를 설정하면(위 코드 예의 settings 작업에서와 같이) 작업은 앱 바에 표시되지 않고 항상 더보기 메뉴에 나열됩니다.
작업이 앱 바에 표시되면 시스템에서는 이 작업의 아이콘을 작업 버튼으로 사용합니다. 머티리얼 아이콘 페이지에서 다양한 유용한 아이콘을 찾아 볼 수 있습니다.
작업 관련 응답
사용자가 앱 바 항목 중 하나를 선택하면 시스템에서는 앱 활동의 onOptionsItemSelected()
콜백 메서드를 호출하고 클릭된 항목을 나타내는 MenuItem
객체를 전달합니다. onOptionsItemSelected()
구현에서 MenuItem.getItemId()
메서드를 호출하여 어느 항목이 눌렸는지 확인합니다. 반환된 ID는 상응하는 <item>
요소의 android:id
속성에서 정의한 값과 일치합니다.
예를 들어 다음 코드는 사용자가 선택한 작업이 어느 것인지 확인합니다. 메서드가 사용자의 작업을 인식하지 않은 경우 슈퍼클래스 메서드를 호출합니다.
Kotlin
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chose the "Settings" item, show the app settings UI... true } R.id.action_favorite -> { // User chose the "Favorite" action, mark the current item // as a favorite... true } else -> { // If we got here, the user's action was not recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
자바
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chose the "Settings" item, show the app settings UI... return true; case R.id.action_favorite: // User chose the "Favorite" action, mark the current item // as a favorite... return true; default: // If we got here, the user's action was not recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }