Android Options Menu Tutorial — Toolbar Menu & Overflow Menu in Android
Options Menu in Android is one of the most commonly used UI components for displaying actions inside the app bar or toolbar.
It is commonly used for:
- Settings
- Search
- Share
- Profile actions
- Overflow menus
- Toolbar actions
In this tutorial, we will learn:
- How Options Menu works
- How to create menu XML
- How to show menu items in Toolbar
- How to create submenus
- How to handle menu item clicks
- Modern AndroidX implementation
What Is Options Menu?
Options Menu is the primary collection of menu items for an Android Activity.
It usually appears:
- Inside Toolbar
- Inside AppBar
- Inside Overflow Menu
Common Use Cases
- Search actions
- Settings screens
- Logout button
- Toolbar actions
- Navigation shortcuts
Important Modern Android Note
Older tutorials use:
android.support.*
which is deprecated.
Modern Android applications should use:
androidx.*
What We Will Build
In this example:
- Create Toolbar menu
- Add icons
- Create dropdown menu
- Create submenu
- Handle click events
- Show Toast messages
Step 1 — Create activity_main.xml
Create:
res/layout/activity_main.xml
Modern ConstraintLayout Example
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android Options Menu"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Why Use ConstraintLayout?
ConstraintLayout provides:
- Better rendering performance
- Responsive layouts
- Flat hierarchy
- Flexible positioning
Step 2 — Create Menu Resource Directory
Inside:
res
Create:
menu
directory.
Step 3 — Create example_menu.xml
Create:
res/menu/example_menu.xml
Modern Menu XML Example
<?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/item1"
android:icon="@drawable/ic_home"
android:title="Home"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/item2"
android:title="Settings"
app:showAsAction="never"/>
<item
android:id="@+id/item3"
android:title="More"
app:showAsAction="never">
<menu>
<item
android:id="@+id/subitem1"
android:title="Profile"/>
<item
android:id="@+id/subitem2"
android:title="Logout"/>
</menu>
</item>
</menu>
Understanding Menu XML
Menu XML defines:
- Menu items
- Icons
- Submenus
- Toolbar actions
- Overflow menu behavior
Understanding showAsAction
| Value | Description |
|---|---|
| ifRoom | Show in Toolbar if space available |
| always | Always show in Toolbar |
| never | Show inside overflow menu |
Step 4 — Create MainActivity.java
package com.example.optionsmenu;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity
extends AppCompatActivity {
@Override
protected void onCreate(
Bundle savedInstanceState
) {
super.onCreate(
savedInstanceState
);
setContentView(
R.layout.activity_main
);
}
@Override
public boolean onCreateOptionsMenu(
Menu menu
) {
MenuInflater inflater =
getMenuInflater();
inflater.inflate(
R.menu.example_menu,
menu
);
return true;
}
@Override
public boolean onOptionsItemSelected(
@NonNull MenuItem item
) {
int id = item.getItemId();
if (id == R.id.item1) {
Toast.makeText(
this,
"Home selected",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
id == R.id.item2
) {
Toast.makeText(
this,
"Settings selected",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
id == R.id.subitem1
) {
Toast.makeText(
this,
"Profile selected",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
id == R.id.subitem2
) {
Toast.makeText(
this,
"Logout selected",
Toast.LENGTH_SHORT
).show();
return true;
}
return super
.onOptionsItemSelected(
item
);
}
}
How Options Menu Works
- Activity starts
- Android calls onCreateOptionsMenu()
- Menu XML inflated
- Toolbar menu displayed
- User clicks item
- onOptionsItemSelected() executes
What Is onCreateOptionsMenu()?
This method creates Toolbar menu items dynamically.
Example
inflater.inflate(
R.menu.example_menu,
menu
);
What Is onOptionsItemSelected()?
This method handles Toolbar item click events.
Toolbar vs ActionBar
| ActionBar | Toolbar |
|---|---|
| Older implementation | Modern customizable component |
| Less flexible | Highly customizable |
Modern Android Recommendation
Modern Android apps should use:
- Material Toolbar
- AndroidX AppCompat
- Navigation Component
- Material Design 3
- Jetpack Compose TopAppBar
Modern Material Toolbar Example
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Jetpack Compose Alternative
Jetpack Compose now uses:
TopAppBar
instead of XML Toolbar menus.
Compose Example
TopAppBar(
title = {
Text("Toolbar")
}
)
Options Menu vs PopupMenu
| Options Menu | PopupMenu |
|---|---|
| Toolbar/AppBar menu | Anchored floating menu |
| Global actions | Contextual actions |
Common Beginner Mistakes
1. Using Deprecated Support Libraries
Always migrate to AndroidX.
2. Forgetting Menu Directory
Menu XML files must be inside:
res/menu
3. Using Too Many Toolbar Icons
Keep Toolbar actions minimal and meaningful.
Best Practices
- Use MaterialToolbar
- Use meaningful icons
- Keep Toolbar uncluttered
- Use overflow menus wisely
- Use Navigation Component
FAQ
What is Options Menu in Android?
Options Menu is the primary Toolbar/AppBar menu used for global actions.
Where is Options Menu displayed?
Inside Toolbar or AppBar.
What is the modern alternative?
Jetpack Compose TopAppBar and MaterialToolbar are modern implementations.
Conclusion
Options Menu is an essential Android UI component for displaying application-wide actions and Toolbar interactions.
It improves navigation, accessibility, and overall user experience.
Modern Android applications should combine AndroidX, Material Design 3, responsive layouts, Navigation Component, and scalable architecture for production-grade applications.
About the Author
Salil Jha is a Full Stack and Mobile Developer specializing in Android, React Native, fintech systems, scalable SaaS platforms, and developer tooling products.
CodeChain Dev — Build Modern Products. Solve Real Problems.
Deep Structural Diagnostics.
Mastering JSON is only the first step. Use our industrial-grade workbench to format, validate, and synthesize models for your production APIs.