Complete Guide to Setting Menu in Android Toolbar

Nov 23, 2025 · Programming · 7 views · 7.8

Keywords: Android | Toolbar | Menu Setup | onCreateOptionsMenu | XML Configuration

Abstract: This article provides a comprehensive guide on how to properly set up and display menu items when using Toolbar as a replacement for traditional ActionBar in Android applications. By analyzing common configuration errors, it presents the correct implementation of overriding onCreateOptionsMenu method and explains the differences in menu handling mechanisms between Toolbar and ActionBar. The article includes complete code examples and best practice recommendations to help developers quickly resolve menu display issues.

Problem Analysis and Background

In Android development, Toolbar serves as a modern replacement for ActionBar, offering more flexible customization options. However, many developers encounter issues with menu display during migration, typically due to insufficient understanding of Toolbar's menu handling mechanism.

Core Solution

To properly display menus in Toolbar, you must override the onCreateOptionsMenu method in your Activity. This is the standard mechanism for handling option menus in Android, applicable whether using ActionBar or Toolbar.

Here's the corrected key code for MainPage.java:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}

This method is automatically called during Activity creation and is responsible for inflating the XML menu resource into the Toolbar. The return true indicates that the menu was successfully created and the system should continue with subsequent processes.

Complete Implementation Steps

First, ensure the Toolbar is properly set as the support action bar:

toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);

Then, add the aforementioned onCreateOptionsMenu method to your Activity. Note that you should not directly call toolbar.inflateMenu() in the onCreate method, as this may cause duplicate menu creation.

Menu XML Configuration Optimization

The original main_menu.xml in the problem contains configuration issues:

<item
    android:id="@+id/menu_main_setting"
    android:icon="@drawable/ic_settings"
    android:orderInCategory="100"
    app:showAsAction="always"
    android:actionLayout="@layout/toolbar"
    android:title="Setting" />

The android:actionLayout="@layout/toolbar" attribute is unnecessary and may cause layout conflicts. The correct configuration should be simplified to:

<item
    android:id="@+id/menu_main_setting"
    android:icon="@drawable/ic_settings"
    app:showAsAction="ifRoom"
    android:title="Setting" />

Alternative Approach Analysis

In some cases, developers might choose not to use setSupportActionBar and instead manage menus directly through Toolbar's API:

toolbar.inflateMenu(R.menu.main_menu);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        // Handle menu item clicks
        return true;
    }
});

While this approach is feasible, it loses compatibility with Android's standard menu handling mechanism and is not recommended as the primary solution.

Best Practice Recommendations

1. Always use onCreateOptionsMenu and onOptionsItemSelected for menu creation and click event handling

2. Use app:showAsAction="ifRoom" instead of "always" in menu XML to adapt to different screen sizes

3. Avoid duplicate menu initialization in multiple locations to prevent unexpected behavior

4. Ensure menu resource files are located in the correct res/menu/ directory

Common Issue Troubleshooting

If menus still fail to display, check the following aspects:

- Confirm the Activity extends AppCompatActivity

- Verify the menu resource ID is correct

- Check if the Toolbar is properly added to the layout

- Ensure no other code interferes with the menu display logic

By following these guidelines, developers can ensure that menu items in Toolbar display correctly and respond to user interactions, providing a consistent user experience.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.