A barra de ações é um componente importante, pois além de servir de identificação do app para o usuário, o componente pode oferecer funcionalidades adicionais, como o menu flutuante. Existem duas classes principais para implementar a barra de ações no Android:
-
ActionBar: Implementação nativa do Android, já integrada ao sistema, mas com menos opções de personalização.
-
Toolbar: Classe mais moderna e amplamente utilizada, que oferece maior flexibilidade para customização e integração com designs modernos.
A Toolbar é a escolha preferida na maioria dos projetos atuais devido à sua versatilidade e suporte a recursos avançados. Materiais para mais detalhes:
-
GOOGLE DEVELOPERS. Adicionar barra de apps. Disponível em: https://developer.android.com/training/appbar#lessons. Acessado em: 14 jul. 2025.
-
GOOGLE DEVELOPERS. Adicionar e processsar ações. Disponível em: https://developer.android.com/training/appbar/actions. Acessado em: 14 jul. 2025.
-
GOOGLE DEVELOPERS. Configurar a barra de apps. Disponível em: https://developer.android.com/training/appbar/setting-up. Acessado em: 14 jul. 2025.
-
STACKOVERFLOW. Qual a diferença de uma toolbar para uma action bar? 2017. Disponível em: https://pt.stackoverflow.com/questions/178775/qual-a-diferen%C3%A7a-de-uma-toolbar-para-uma-action-bar. Pergunta feita pela usuário Aline (https://pt.stackoverflow.com/users/36515/aline) e respondida pelo usuário (https://pt.stackoverflow.com/users/2541/ramaral). Acessado em: 14 jul. 2025.
Exemplos práticos
-
Inicialmente deve-se verificar no arquivo themes.xml se a seguinte tag: <style name="Base.Theme.ExemploMenu" parent="Theme.Material3.DayNight.NoActionBar"> está configurada como NOACTIONBAR, pois assim você poderá adicionar sua própria barra de ferramentas.
-
colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- Cores para o Tema Claro --> <color name="primary_light">#6200EE</color> <color name="secondary_light">#03DAC6</color> <color name="background_light">#FFFFFF</color> <!-- Cores para o Tema Escuro --> <color name="primary_dark">#BB86FC</color> <color name="secondary_dark">#03DAC6</color> <color name="background_dark">#121212</color> </resources>
-
themes.xml (tema claro)
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Base.Theme.ExemploMenu" parent="Theme.Material3.DayNight.NoActionBar"> <!-- Customize your light theme here. --> <item name="colorPrimary">@color/primary_light</item> <item name="colorSecondary">@color/secondary_light</item> <item name="android:background">@color/background_light</item> </style> <style name="Theme.ExemploMenu" parent="Base.Theme.ExemploMenu" /> </resources>
-
themes.xml (tema escuro)
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Base.Theme.ExemploMenu" parent="Theme.Material3.DayNight.NoActionBar"> <!-- Customize your dark theme here. --> <item name="colorPrimary">@color/primary_dark</item> <item name="colorSecondary">@color/secondary_dark</item> <item name="android:background">@color/background_dark</item> </style> </resources>
-
strings.xml
<resources> <string name="app_name">ExemploMenu</string> <string name="java">JAVA</string> <string name="php">PHP</string> <string name="c">C</string> <string name="android">Android</string> </resources>
-
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <include layout="@layout/meu_toolbar"/> </LinearLayout>
-
MainActivity.java
import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.meu_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("AppBar"); }//onCreate @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_toolbar,menu); return super.onCreateOptionsMenu(menu); }// @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { Intent it = null; if(R.id.java == item.getItemId()){ it= new Intent(getApplicationContext(), JavaActivity.class); it.putExtra("dados","JAVA"); startActivity(it); return true; } if(R.id.php == item.getItemId()){ it= new Intent(getApplicationContext(), PhpActivity.class); it.putExtra("dados","PHP"); startActivity(it); return true; } if(R.id.c == item.getItemId()){ it= new Intent(getApplicationContext(), JavaActivity.class); it.putExtra("dados","C"); startActivity(it); return true; } if(android.R.id.home == item.getItemId()){ finish(); return true; } return super.onOptionsItemSelected(item); }//onOptions }//class
-
meu_toolbar.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/meu_toolbar" android:elevation="10dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:text="@string/android"/> </androidx.appcompat.widget.Toolbar>
-
menu_toolbar.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/java" android:icon="@mipmap/ic_launcher" android:title="@string/java"/> <item android:id="@+id/php" android:title="@string/php"/> <item android:id="@+id/c" android:title="@string/c"/> </menu>
-
JavaActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class JavaActivity extends AppCompatActivity { private TextView textViewJava; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_java); textViewJava = findViewById(R.id.textViewJava); String msg = getIntent().getStringExtra("dados"); textViewJava.setText(msg); }//onCreate }//class
-
activity_java.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".JavaActivity"> <TextView android:id="@+id/textViewJava" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/java" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
-
PhpActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class PhpActivity extends AppCompatActivity { private TextView textViewPhp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_php); textViewPhp = findViewById(R.id.textViewPhp); String msg = getIntent().getStringExtra("dados"); textViewPhp.setText(msg); }//onCreate }
-
activity_php.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".PhpActivity"> <TextView android:id="@+id/textViewPhp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/php" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
-
CActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class CActivity extends AppCompatActivity { private TextView textViewC; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_c); textViewC = findViewById(R.id.textViewC); String msg = getIntent().getStringExtra("dados"); textViewC.setText(msg); }//onCreate }
-
activity_c.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CActivity"> <TextView android:id="@+id/textViewC" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/c" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
OBS: Depois faça o teste com o emulador configurado com o tema escuro.