Advertisement
Android SDK

Android SDK: Implement an Options Menu

by

This tutorial will teach you how to implement an options menu in any of your Android SDK applications. Read on!

In Android apps, you can make use of three standard menus supported within the platform: the context menu, the options menu,  and submenus. The options menu appears when the user presses the menu button on their Android device. This is a common feature in almost all apps, so your users will be used to the menu appearing in this way. The options menu is typically used for providing additional info about an app, as well as linking to a help and settings sections. To implement an options menu for an Activity in an Android app, a few fairly straightforward steps are required.


Step 1: Open an Activity Class

The options menu you create will work with one or more Activity classes, so choose an Activity and open it in Eclipse. If your app only has one Activity class as its main screen, you can use it. If you want to create a new Activity for the purposes of this tutorial, feel free to do so. Select your application package and choose "File", "New", then "Class" and enter a name of your choice. Remember to make your class extend the Activity class and add it to the application Manifest.


Step 2: Create a Resources Folder

If you look at your application project in the Eclipse Package Explorer, you will see the various files and directories within it. The "res" folder holds all of your application resources. To create a menu, you need a menu folder, so create one inside the "res" folder by selecting it and choosing "File", "New", then "Folder" and entering "menu" as the name.

Creating a New Folder

Your new folder will appear within the "res" directory:

The Menu Resources Folder

Step 3: Create a Menu XML File

Your options menu will be defined as an XML file inside the new menu folder you created. Choose the folder and create a new file by selecting "File", "New", then "File" and entering a name. You can choose any filename you like, for example "my_options_menu.xml". Eclipse will display error messages when you first create the menu file, but don't worry, these will disappear as you build it.

Open your new XML file and enter the following outline:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

</menu>

Between these opening and closing tags, you will place XML markup for each item in your options menu.


Step 4: Add Items to Your Menu

You can add one or more items to your options menu depending on the needs of your own project. Add an item for each menu option using the following syntax:

<item android:id="@+id/about" 
android:title="About" />
<item android:id="@+id/help" 
android:title="Help" />

This defines two menu items, one for an "About" section and one for "Help" information. Each menu has an ID attribute and a title. The ID attribute allows your application code to refer to the item and the title defines the text users will see when the menu appears.


Step 5: Create Icons for Your Menu Items

You do not need to create icons for your options menu items, but you can do so if you wish. Use a graphic design or image editing program of your choice to create your icons as PNG files and place them in your application drawable folders. By default, Eclipse creates three drawable folders, for low, medium, and high resolution user devices. You can copy image files into these folders by browsing to your workspace, then locating your Android project directory and finding the "res/drawable" folders from there.

The official Android guidelines recommend a maximum of 72px squared for high resolution, 48px for medium and 36px for low. Once you have your icons in their folders, you can alter your menu item XML to include them as follows:

<item android:id="@+id/about" 
android:icon="@drawable/about" 
android:title="About" />
<item android:id="@+id/help" 
android:icon="@drawable/help" 
android:title="Help" />

Each drawable reference uses the filename minus its extension.


Step 6: Inflate Your Menu Resource

To instruct Android to use your options menu, open the Activity class you want it to appear with. Add the following method to your Java code, inside the class declaration and after the "onCreate" method:

public boolean onCreateOptionsMenu(Menu menu) {
		
	MenuInflater inflater = getMenuInflater();
	inflater.inflate(R.menu.my_options_menu, menu);
	return true;
}

Alter the "my_options_menu" section if you saved your menu XML file with a different name.

The Options Menu for an Activity

Step 7: Detect User Interaction

To respond to user interaction with your menu, you first need to detect it within your Activity class. Add the following method outline after the "onCreateOptionsMenu" method:

public boolean onOptionsItemSelected(MenuItem item) {
	
	//respond to menu item selection

}

Inside this method, which returns a boolean value, you can add code to respond to each particular item. The system will automatically call the "onOptionsItemSelected" method when the user chooses any of the options menu items.


Step 8: Respond to Menu Item Selection

Before your code can respond appropriately to user interaction with the menu, you need to work out which item was selected. Add a switch statement to your method using the following sample syntax:

switch (item.getItemId()) {
	case R.id.about:
	startActivity(new Intent(this, About.class));
	return true;
	case R.id.help:
	startActivity(new Intent(this, Help.class));
	return true;
	default:
	return super.onOptionsItemSelected(item);
}

Add a case statement for each item in your menu. This sample code starts new Activity screens for each item chosen. If you opt to do this, you will need to add an Activity class for each option in your application Java code as well as in the Manifest file.

The User Selecting a Menu Item

Conclusion

Your Activity should now display the options menu when users press their device menu button. The complete Activity code follows, for an options menu used with the main Activity class:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class GreatAndroidAppActivity extends Activity {

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.my_options_menu, menu);
		return true;
	}

	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.about:
		startActivity(new Intent(this, About.class));
		return true;
		case R.id.help:
		startActivity(new Intent(this, Help.class));
		return true;
		default:
		return super.onOptionsItemSelected(item);
		}
	}
}

Eclipse typically adds the import statements automatically as you enter your Java code.

As with any development project, your apps will be more usable if they exploit the type of interaction and functionality users expect as standard. Using the options menu is a good way to achieve this when providing informative sections.

Related Posts
  • Code
    Android SDK
    Create a Music Player on Android: Song Playback0d63m preview image@2x
    In this series, we are creating a music player on Android using the MediaPlayer and MediaController classes. In the first part, we created the app and prepared the user interface for playback. We presented the list of songs on the user device and specified a method to execute when the user makes a selection. In this part of the series, we will implement a Service class to execute music playback continuously, even when the user is not directly interacting with the application.Read More…
  • Code
    Android SDK
    Create a Music Player on Android: Project Setup0d63m preview image@2x
    The Android platform provides resources for handling media playback, which your apps can use to create an interface between the user and their music files. In this tutorial series, we will create a basic music player application for Android. The app will present a list of songs on the user device, so that the user can select songs to play. The app will also present controls for interacting with playback and will continue playing when the user moves away from the app, with a notification displayed while playback elapses.Read More…
  • Code
    Android SDK
    Create a Hangman Game: User InteractionAndroid hangman game preview retina
    In this series, we are creating a Hangman game for the Android platform. So far, we've built the application's user interface, including images, drawables, and layouts. In this third and final installment, we are going to focus on user interaction.Read More…
  • Code
    Android SDK
    Create a Hangman Game: User InterfaceAndroid hangman game preview retina
    In this series, we are creating a Hangman game for the Android platform. In the first tutorial, we set the application up to present two screens to the user and we also made a start with the user interface elements, the images and shape drawables to be precise. In the second tutorial, we will zoom in on the game's layout.Read More…
  • Code
    Android SDK
    Create a Hangman Game: Project SetupAndroid hangman game preview retina
    In this series, I will show you how to create a simple Hangman game for Android. In every tutorial, you'll learn a number of fundamental skills for creating Android applications. The application will consist of two screens, include user interaction involving adapters, contain dialogs and an action bar, and leverage XML for data storage. Let's get started.Read More…
  • Code
    Android SDK
    Android SDK: Project ManifestAndroid preview@2x
    In this series of tutorials we are learning about Android development from scratch and getting acquainted with the basic concepts and practices you need to know in order to start working on the platform. So far we have looked at various parts of an Android project, including its resources. In this tutorial, we will explore the project manifest file.Read More…