A barra de apps permite adicionar botões para ações do usuário. Esse recurso permite colocar as ações mais importantes para o contexto atual na parte de cima do app. Por exemplo, um app de navegação de fotos pode mostrar os botões compartilhar e criar álbum na parte de cima quando o usuário estiver olhando para o rolo de fotos. Quando o usuário olha para uma foto individual, o app pode mostrar os botões cortar e filtrar.
O espaço na barra de apps é limitado. Se um app declarar mais ações do que o permitido na barra de apps, ela vai enviar 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 ser mostrada na barra de apps.
![Uma imagem mostrando o app Now in Android com um ícone de barra de ações](https://developer.android.com/static/images/ui/notifications/actions_actionbar.png?authuser=5&hl=pt)
Adicionar botões de ação
Todos os botões de ação e outros itens disponíveis no menu flutuante são
definidos em um
recurso de menu XML. Para adicionar
ações à barra de ações, crie um novo arquivo XML no diretório
res/menu/
do projeto.
Adicione um elemento
<item>
para cada item que você quer incluir na barra de ações, conforme mostrado no
exemplo de arquivo XML do menu abaixo:
<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 é
mostrada como um botão na barra de apps. Se você definir
app:showAsAction="ifRoom"
, como na ação favorite
do código de exemplo, a ação vai aparecer como um botão se houver espaço na
barra de apps para ela. Se não houver espaço suficiente, as ações excedentes serão enviadas para o
menu flutuante. Se você definir app:showAsAction="never"
, como na
ação settings do código de exemplo, a ação será sempre listada no
menu flutuante e não será exibida na barra de apps.
O sistema usará o ícone da ação como o botão de ação se a ação for exibida na barra de apps. Você pode encontrar muitos ícones úteis em Ícones do Material Design (link em inglês).
Responder a ações
Quando o usuário seleciona um dos itens da barra de apps, o sistema chama o
método de callback onOptionsItemSelected()
da atividade e transmite um
objeto MenuItem
para indicar qual item foi tocado. Na implementação de
onOptionsItemSelected()
, chame o método
MenuItem.getItemId()
para determinar qual item foi tocado. O ID retornado corresponde ao valor
declarado no atributo android:id
do elemento
<item>
correspondente.
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á o método da 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); } }