Android PopupMenu Tutorial — Create Modern Popup Menus in Android
PopupMenu in Android is a lightweight floating menu anchored to a specific view.
It is commonly used for:
- Overflow menus
- Quick actions
- Item operations
- Contextual options
- Action buttons
In this tutorial, we will learn:
- What PopupMenu is
- How to create PopupMenu
- How to inflate menu XML
- How to handle item clicks
- Modern AndroidX implementation
- Material Design recommendations
What Is PopupMenu?
PopupMenu is a floating menu that appears anchored to a View.
Unlike ContextMenu:
- PopupMenu appears on click
- ContextMenu appears on long press
Common PopupMenu Use Cases
- Toolbar overflow menus
- RecyclerView item actions
- Chat message options
- More options buttons
- File operations
PopupMenu vs ContextMenu
| PopupMenu | ContextMenu |
|---|---|
| Appears on click | Appears on long press |
| Anchored to view | Contextual interaction |
| Quick actions | Item-specific operations |
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:
- User clicks button
- PopupMenu appears
- User selects menu item
- Toast message displays
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">
<Button
android:id="@+id/button_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Popup"
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 performance
- Responsive layouts
- Flat hierarchy
- Flexible positioning
Step 2 — Create Menu XML
Create:
res/menu/popup_menu.xml
popup_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android=
"http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:title="Item 1"/>
<item
android:id="@+id/item2"
android:title="Item 2"/>
<item
android:id="@+id/item3"
android:title="Item 3"/>
<item
android:id="@+id/item4"
android:title="Item 4"/>
</menu>
Understanding Menu XML
Menu XML files define:
- Menu items
- Icons
- Titles
- Actions
- Submenus
Step 3 — Create MainActivity.java
package com.example.popupmenu;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;
public class MainActivity
extends AppCompatActivity
implements PopupMenu
.OnMenuItemClickListener {
@Override
protected void onCreate(
Bundle savedInstanceState
) {
super.onCreate(
savedInstanceState
);
setContentView(
R.layout.activity_main
);
Button button =
findViewById(
R.id.button_popup
);
button.setOnClickListener(
this::showPopup
);
}
public void showPopup(
View view
) {
PopupMenu popupMenu =
new PopupMenu(
this,
view
);
popupMenu.setOnMenuItemClickListener(
this
);
popupMenu.inflate(
R.menu.popup_menu
);
popupMenu.show();
}
@Override
public boolean onMenuItemClick(
@NonNull MenuItem item
) {
if (
item.getItemId()
== R.id.item1
) {
Toast.makeText(
this,
"Item 1 clicked",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
item.getItemId()
== R.id.item2
) {
Toast.makeText(
this,
"Item 2 clicked",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
item.getItemId()
== R.id.item3
) {
Toast.makeText(
this,
"Item 3 clicked",
Toast.LENGTH_SHORT
).show();
return true;
} else if (
item.getItemId()
== R.id.item4
) {
Toast.makeText(
this,
"Item 4 clicked",
Toast.LENGTH_SHORT
).show();
return true;
}
return false;
}
}
How PopupMenu Works
- User clicks button
- PopupMenu object created
- Menu XML inflated
- Popup menu displayed
- User selects item
- onMenuItemClick() executes
Understanding PopupMenu Constructor
PopupMenu(
context,
anchorView
)
PopupMenu requires:
- Context
- Anchor View
What Is inflate()?
The:
inflate()
method loads menu XML into PopupMenu.
Example
popupMenu.inflate(
R.menu.popup_menu
);
What Is setOnMenuItemClickListener()?
This listener handles menu item click events.
Example
popupMenu
.setOnMenuItemClickListener(
this
);
Modern Android Recommendations
Modern Android applications commonly use:
- PopupMenu
- Material Toolbar menus
- Bottom Sheets
- RecyclerView item menus
- Jetpack Compose DropdownMenu
PopupMenu in RecyclerView
PopupMenus are heavily used inside:
- Chat applications
- Social media apps
- File managers
- E-commerce product lists
Modern Material Design Menus
Material Design now recommends:
- Minimal actions
- Clear icons
- Bottom sheets for complex actions
- Responsive menu behavior
Jetpack Compose Alternative
Jetpack Compose now uses:
DropdownMenu
instead of XML PopupMenus.
Compose Example
DropdownMenu(
expanded = expanded,
onDismissRequest = {}
)
PopupMenu vs BottomSheet
| PopupMenu | BottomSheet |
|---|---|
| Small quick actions | Complex actions |
| Lightweight | Large interaction UI |
| Anchored to view | Slides from bottom |
Common Beginner Mistakes
1. Using Deprecated Support Libraries
Always use AndroidX libraries.
2. Forgetting Menu XML
PopupMenu requires valid menu resource file.
3. Using Too Many Menu Items
Keep PopupMenu simple and minimal.
Best Practices
- Use concise menu options
- Use icons carefully
- Prefer Material Design styling
- Keep actions contextual
- Use BottomSheets for complex flows
FAQ
What is PopupMenu in Android?
PopupMenu is a floating contextual menu anchored to a View.
How do I show PopupMenu?
Create PopupMenu object and call:
popupMenu.show()
What is the modern alternative?
Jetpack Compose DropdownMenu and Material BottomSheets are modern alternatives.
Conclusion
PopupMenu is a simple and efficient Android UI component for displaying quick contextual actions.
It improves user interaction while keeping the UI clean and lightweight.
Modern Android applications should combine AndroidX, Material Design, responsive layouts, and scalable architecture for production-grade user experiences.
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.