작업 추가 및 처리

Compose 사용해 보기
Jetpack Compose는 Android에 권장되는 UI 도구 키트입니다. Compose에서 구성요소를 추가하는 방법을 알아보세요.

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

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

작업 표시줄 아이콘이 있는 Now in Android 앱을 보여주는 이미지
그림 1. 'Now in Android' 앱의 작업 아이콘입니다.

작업 버튼 추가

모든 작업 버튼과 작업 오버플로에서 사용할 수 있는 다른 항목은 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);

    }
}