Adicionar e gerenciar ações

A barra de apps permite adicionar botões para ações do usuário. Com esse recurso, você coloca as ações mais importantes para o contexto atual na parte superior do app. Por exemplo, um app de navegação por fotos pode mostrar as opções compartilhar e criar álbum na parte superior quando o usuário estiver olhando para o rolo de fotos. Quando o usuário olhar para uma foto individual, o aplicativo poderá exibir a opção Cortar e filter.

O espaço na barra de apps é limitado. Se um aplicativo declara mais ações do que o permitido Na barra de apps, ela envia as ações em excesso para um menu flutuante. O app também pode especificar que uma ação seja sempre exibida no menu flutuante, em vez de na barra de apps.

Uma imagem mostrando o app Now no Android com um ícone na barra de ações
Figura 1. Um ícone de ação no "Now in Android" app.
.

Adicionar botões de ação

Todos os botões de ação e outros itens disponíveis no menu flutuante são definido em um arquivo XML recurso de menu. Para adicionar ações na barra de ações, crie um novo arquivo XML na res/menu/.

Adicione um <item> para cada item que você deseja incluir na barra de ações, conforme mostrado a seguir, arquivo XML de menu de exemplo:

<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>

O atributo app:showAsAction especifica se a ação é mostrado como um botão na barra de apps. Se você definir app:showAsAction="ifRoom", como no exemplo de código ação favorito: a ação aparece como um botão se houver espaço na na barra de apps. Se não houver espaço suficiente, as ações em excesso serão enviadas ao menu flutuante. Se você definir app:showAsAction="never", como no settings do código de exemplo. A ação é sempre listada no e não exibido na barra de aplicativos.

O sistema vai usar o ícone da ação como botão de ação se ela for mostrada na barra de apps. Você pode encontrar vários ícones úteis Ícones do Material Design.

Responder às ações

Quando o usuário seleciona um dos itens da barra de apps, o sistema chama seu das atividades onOptionsItemSelected() método de retorno de chamada e passa um Objeto MenuItem para indicar qual item foi tocado. Na sua implementação do onOptionsItemSelected(), chame o método MenuItem.getItemId() para determinar qual item foi tocado. O ID retornado corresponde ao valor que você declarar no elemento <item> correspondente android:id.

Por exemplo, o snippet de código a seguir verifica qual ação o usuário seleciona. Se o método não reconhecer a ação do usuário, ele invocará a superclasse :

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);

    }
}