작업 추가 및 처리

앱 바를 사용하면 사용자 작업의 버튼을 추가할 수 있습니다. 이 기능을 사용하면 현재 컨텍스트에 가장 중요한 작업을 앱 상단에 배치할 수 있습니다. 예를 들어 사진 탐색 앱에서는 사용자가 사진 롤을 볼 때 상단에 공유앨범 만들기 버튼을 표시할 수 있습니다. 사용자가 개별 사진을 볼 때 앱에 자르기필터 버튼이 표시될 수 있습니다.

앱 바의 공간은 한정되어 있습니다. 앱이 앱 바에 들어갈 수 있는 것보다 더 많은 작업을 선언하면 앱 바는 초과 작업을 더보기 메뉴로 보냅니다. 앱은 작업이 앱 바에 표시되는 대신 항상 더보기 메뉴에 표시되도록 지정할 수도 있습니다.

작업 모음 아이콘과 함께 Now in Android 앱을 보여주는 이미지
그림 1. 'Now in Android' 앱의 작업 아이콘

작업 버튼 추가

모든 작업 버튼과 작업 더보기에서 사용할 수 있는 기타 항목은 XML 메뉴 리소스에서 정의됩니다. 작업 모음에 작업을 추가하려면 프로젝트의 res/menu/ 디렉터리에 새 XML 파일을 만듭니다.

다음 샘플 메뉴 XML 파일과 같이 작업 모음에 포함할 각 항목의 <item> 요소를 추가합니다.

<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 속성은 작업을 앱 바에 버튼으로 표시할지 여부를 지정합니다. 예시 코드의 favorite 작업에서와 같이 app:showAsAction="ifRoom"를 설정하면 작업은 앱 바에 공간이 있으면 버튼으로 표시됩니다. 공간이 충분하지 않으면 초과 작업이 더보기 메뉴로 전송됩니다. 예시 코드의 settings 작업에서와 같이 app:showAsAction="never"를 설정하면 작업은 항상 더보기 메뉴에 나열되고 앱 바에는 표시되지 않습니다.

작업이 앱 바에 표시되면 시스템에서는 작업 아이콘을 작업 버튼으로 사용합니다. 머티리얼 아이콘에서 여러 유용한 아이콘을 찾을 수 있습니다.

작업에 응답

사용자가 앱 바 항목 중 하나를 선택하면 시스템은 활동의 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);

    }
}