Exemplo de Tutorial da Barra de Ação do Android

Hoje vamos explorar o ActionBar do Android. A Action Bar é uma parte importante de qualquer aplicativo, seja uma aplicação web ou um aplicativo móvel. Hoje aprenderemos como implementar a barra de ação em aplicativos Android usando o componente ActionBar.

ActionBar do Android

O ActionBar do Android é uma barra de menus que percorre o topo da tela da atividade no Android. O ActionBar do Android pode conter itens de menu que se tornam visíveis quando o usuário clica no botão “menu”. Em geral, um ActionBar consiste nos seguintes quatro componentes:

  • Ícone do Aplicativo: O logotipo ou ícone de marca do aplicativo será exibido aqui
  • Controle de Visualização: Um espaço dedicado para exibir o título do aplicativo. Também fornece a opção de alternar entre visualizações adicionando um seletor ou navegação por abas
  • Botões de Ação: Algumas ações importantes do aplicativo podem ser adicionadas aqui
  • Overflow de Ações: Todas as ações menos importantes serão mostradas como um menu

Configuração do ActionBar do Android

Todas as atividades que utilizam o tema Theme.Holo ou um tema derivado de Theme.Holo conterão automaticamente uma ActionBar.

Android ActionBar Menu

A maneira mais simples de adicionar ícones de barra de ferramentas e itens de overflow de ação à barra de ação é criando um arquivo de recurso XML de menu encontrado na pasta res/menu. Podemos adicionar itens de menu no arquivo XML bruto presente na pasta da seguinte forma: menu_main.xml

<menu xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools" tools:context=".MainActivity">
    
    <item
        android:id="@+id/add" android:icon="@android:drawable/ic_menu_add" app:showAsAction="always"   android:title="@string/add"/>
    <item
        android:id="@+id/reset" android:icon="@android:drawable/ic_menu_revert" app:showAsAction="always|withText" android:title="@string/reset"/>
    <item
        android:id="@+id/about" android:icon="@android:drawable/ic_dialog_info" app:showAsAction="never" android:title="@string/about">
    </item>
    <item
        android:id="@+id/exit"  app:showAsAction="never" android:title="@string/exit">
    </item>
</menu>

São quatro coisas que precisam ser configuradas para cada item de menu.

  1. android:id: o atributo especifica o id do item de menu. Isso funciona como ids em qualquer outro lugar no aplicativo Android. Um valor android:id começando com @+id/ criará uma constante na coleção constante R.menu
  2. android:title: o valor do atributo contém o título do item de menu
  3. android:icon: o atributo faz referência a um ícone nos diretórios de drawable
  4. android:showAsAction: Este atributo indica como o item dado deve ser retratado na barra de ação. Podemos escolher entre qualquer uma das bandeiras mencionadas abaixo:
    • always para mantê-lo na ActionBar o tempo todo
    • ifRoom para mantê-lo apenas se houver espaço disponível
    • never isso significa que o item de menu não será colocado na ActionBar como um ícone. Ele só será visível quando o botão de menu for clicado, no menu que está aparecendo
    • |withText: podemos anexar isso a sempre ou seRoom, para indicar que o botão da barra de ferramentas seja tanto o ícone quanto o título, não apenas o ícone

Observe que always não é garantido ser um botão de barra de ferramentas – se você solicitar 100 itens sempre, você não terá espaço para todos eles. No entanto, os itens always têm prioridade para o espaço na barra de ação sobre os itens ifRoom.

Inflar o Menu na ActionBar do Android

Para que os itens do menu definidos no arquivo XML do menu sejam exibidos, você precisa inflar o arquivo do menu. Fazemos isso dentro do método onCreateOptionsMenu() da atividade onde desejamos adicionar a ActionBar. Aqui está o trecho de código:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflar o menu; isso adiciona itens à barra de ação, se estiver presente.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

O parâmetro R.menu.menu_main é a constante que se refere ao arquivo XML do menu. O parâmetro do menu é o menu no qual queremos inflar os itens do menu.

Respondendo aos Eventos da ActionBar do Android

Para saber quando o usuário toca em um desses itens, precisamos substituir onOptionsItemSelected() da MainActivity, como mostrado abaixo:

@Override
public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
    case R.id.add:
        // adicione a função a ser realizada aqui
        return(true);
    case R.id.reset:
        // adicione a função a ser realizada aqui
        return(true);
    case R.id.about:
        // adicione a função a ser realizada aqui
        return(true);
    case R.id.exit:
        // adicione a função a ser realizada aqui
        return(true);
}
    return(super.onOptionsItemSelected(item));
}

Agora vamos atribuir algumas funções básicas a cada item de menu em nosso projeto.

Estrutura do Projeto

Código de Exemplo do ActionBar no Android

Nós implementamos os quatro itens de menu na MainActivity, conforme mostrado no trecho abaixo: MainActivity.java

package com.journaldev.actionbar;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    TextView count;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Infla o menu; isso adiciona itens à barra de ação, se presente.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) {
        case R.id.add:
            count=(TextView)findViewById(R.id.textView);
            count.setText("Add is clicked");
            return(true);
        case R.id.reset:
            count=(TextView)findViewById(R.id.textView);
            count.setText("Nothing is selected");
            return(true);
        case R.id.about:
            Toast.makeText(this, R.string.about_toast, Toast.LENGTH_LONG).show();
            return(true);
        case R.id.exit:
            finish();
            return(true);

    }
        return(super.onOptionsItemSelected(item));
    }
}

Os itens são atribuídos às suas respectivas funções. O item selecionado é determinado pelo seu ID, que foi definido no arquivo menu_main.xml. Aqui, apenas alteramos o conteúdo do TextView nos dois primeiros itens, exibimos um toast no terceiro e saímos da aplicação no quarto item. Note que AppCompatActivity é uma substituição para a versão obsoleta de ActionBarActivity. O arquivo styles.xml é definido da seguinte forma:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

</resources>

Como você pode ver, o tema pai usa um derivado de Theme.AppCompat, que possui uma ActionBar por padrão (a menos que você use a classe Theme.AppCompat.Light.NoActionBar). Portanto, não há necessidade de defini-lo explicitamente aqui.

Android Action Bar Backporting

  1. Desde que ActionBar foi introduzido após o Android Honeycomb 3.0, para implementar ActionBar quando minSdkVersion for 11 ou menos, precisamos importar o app-compat-v7 jar em nosso gradle, como fizemos aqui para habilitar a compatibilidade reversa
  2. Outra maneira é importar e estender o MainActivity com ActionBarSherlock independente do backport da action bar, já que esta classe foi introduzida após o Android 3.0

A imagem abaixo mostra a saída produzida pelo nosso projeto, você pode ver que a ActionBar inclui os ícones predefinidos. O textview atualiza o conteúdo desde que o ícone de adição foi clicado. O textview reverte o conteúdo para o original desde que o reset foi clicado. Quando sobre é clicado, uma notificação de brinde aparece como mostrado abaixo. Isso encerra o tutorial de exemplo de barra de ação do Android. Você também deve ler sobre ActionBar personalizada do Android. Você pode baixar o projeto ActionBar do Android no link abaixo.

Download do Projeto de Exemplo da ActionBar do Android

Source:
https://www.digitalocean.com/community/tutorials/android-actionbar-example-tutorial