앱 바에서 사용자 작업의 버튼을 추가할 수 있습니다. 이 기능을 사용하면 현재 컨텍스트에 가장 중요한 작업을 앱 상단에 배치할 수 있습니다. 예를 들어 사진 탐색 앱의 경우 사용자가 사진 롤을 볼 때 상단에 공유 및 앨범 만들기 버튼이 표시될 수 있습니다. 사용자가 개별 사진을 볼 때 앱에 자르기 및 필터 버튼이 표시될 수 있습니다.
앱 바의 공간은 한정되어 있습니다. 앱이 선언한 작업이 앱바에 들어갈 수 있는 것보다 더 많은 경우 앱바는 초과 작업을 더보기 메뉴에 보냅니다. 앱은 특정 작업이 앱바가 아니라 더보기 메뉴에 항상 표시되도록 지정할 수도 있습니다.
![작업 표시줄 아이콘이 있는 Now in Android 앱을 보여주는 이미지](https://developer.android.google.cn/static/images/ui/notifications/actions_actionbar.png?authuser=3&hl=ko)
작업 버튼 추가
모든 작업 버튼과 작업 오버플로에서 사용할 수 있는 다른 항목은 XML 메뉴 리소스에서 정의됩니다. 작업 표시줄에 작업을 추가하려면 프로젝트의 res/menu/
디렉터리에 새 XML 파일을 만듭니다.
작업 표시줄에 포함할 각 항목의 <item>
요소를 추가합니다. 다음 샘플 메뉴 XML 파일을 참고하세요.
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", must 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, must 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 작업에서와 같이) 작업은 앱 바에 표시되지 않고 항상 더보기 메뉴에 나열됩니다.
작업이 앱 바에 표시되면 시스템에서는 이 작업의 아이콘을 작업 버튼으로 사용합니다. Material Icons에서 다양한 유용한 아이콘을 찾아 볼 수 있습니다.
작업에 응답
사용자가 앱 바 항목 중 하나를 선택하면 시스템은 활동의 onOptionsItemSelected()
콜백 메서드를 호출하고 탭된 항목을 나타내는 MenuItem
객체를 전달합니다. onOptionsItemSelected()
구현에서 MenuItem.getItemId()
메서드를 호출하여 어느 항목이 탭되었는지 확인합니다. 반환된 ID는 상응하는 <item>
요소의 android:id
속성에서 선언한 값과 일치합니다.
예를 들어 다음 코드 스니펫은 사용자가 선택한 작업을 확인합니다. 메서드가 사용자의 작업을 인식하지 못하면 슈퍼클래스 메서드를 호출합니다.
Kotlin
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chooses the "Settings" item. Show the app settings UI. true } R.id.action_favorite -> { // User chooses the "Favorite" action. Mark the current item as a // favorite. true } else -> { // The user's action isn't recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chooses the "Settings" item. Show the app settings UI. return true; case R.id.action_favorite: // User chooses the "Favorite" action. Mark the current item as a // favorite. return true; default: // The user's action isn't recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }