Creating a Menu in an Activity
suggest changeTo define your own menu, create an XML file inside your project’s res/menu/
directory and build the menu with the following elements:
<menu>
: Defines a Menu, which holds all the menu items.<item>
: Creates a MenuItem, which represents a single item in a menu. We can also create a nested element in order to create a submenu.
Step 1:
Create your own xml file as the following:
In res/menu/main_menu.xml
:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/aboutMenu" android:title="About" /> <item android:id="@+id/helpMenu" android:title="Help" /> <item android:id="@+id/signOutMenu" android:title="Sign Out" /> </menu>
Step 2:
To specify the options menu, override onCreateOptionsMenu()
in your activity.
In this method, you can inflate your menu resource (defined in your XML file i.e., res/menu/main_menu.xml
)
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; }
When the user selects an item from the options menu, the system calls your activity’s overridden onOptionsItemSelected()
method.
- This method passes the MenuItem selected.
- You can identify the item by calling
getItemId()
, which returns the unique ID for the menu item (defined by theandroid:id attribute
in the menu resource -res/menu/main_menu.xml
)*/
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.aboutMenu: Log.d(TAG, "Clicked on About!"); // Code for About goes here return true; case R.id.helpMenu: Log.d(TAG, "Clicked on Help!"); // Code for Help goes here return true; case R.id.signOutMenu: Log.d(TAG, "Clicked on Sign Out!"); // SignOut method call goes here return true; default: return super.onOptionsItemSelected(item); } }
—
Wrapping up!
Your Activity
code should look like below:
public class MainActivity extends AppCompatActivity { private static final String TAG = "mytag"; @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.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.aboutMenu: Log.d(TAG, "Clicked on About!"); // Code for About goes here return true; case R.id.helpMenu: Log.d(TAG, "Clicked on Help!"); // Code for Help goes here return true; case R.id.signOutMenu: Log.d(TAG, "User signed out"); // SignOut method call goes here return true; default: return super.onOptionsItemSelected(item); } } }
—
Screenshot of how your own Menu looks:

Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents