From 5e0959393426371dadef2c7905d5c915a1ac2dd4 Mon Sep 17 00:00:00 2001
From: Scott Main For information about how to provide contextual actions with {@code ActionMode},
+ * read the Menus
+ * developer guide.Developer Guides
+ *
Note: If you're looking for information about the contextual +action bar for displaying contextual action items, see the Menu guide.
+Action Bar Design
@@ -225,9 +230,10 @@ later—calling {@link android.app.Activity#getActionBar()} will return null href="{@docRoot}guide/topics/ui/menus.html#OptionsMenu">options menu. To do this, you can declare that the menu item should appear in the action bar as an "action item." An action item can include an icon and/or a text title. If a menu item does not appear as an action item, then the -system places it in the overflow menu. The overflow menu is revealed either by the device MENU +system places it in the overflow menu. The overflow menu is revealed either by the device +Menu button (if provided by the device) or an additional button in the action bar (if the device does not -provide the MENU button). +provide the Menu button).
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index 7b5b3dc2f3c18..a2313b368b821 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -6,77 +6,129 @@ parent.link=index.html
Menus are an important part of an activity's user interface, which provide users a familiar -way to perform actions. Android offers a simple framework for you to add standard -menus to your application.
+Menus are a common user interface component in many types of applications. To provide a familiar +and consistent user experience, you should use the {@link android.view.Menu} APIs to present user +actions and other options in your activities.
+ +Beginning with Android 3.0 (API level 11), Android-powered devices are no longer required to +provide a dedicated Menu button. With this change, Android apps should migrate away from a +dependence on the traditional 6-item menu panel and instead provide an action bar to present common +user actions.
+ +Although the design and user experience for some menu items have changed, the semantics to define +a set of actions and options is still based on the {@link android.view.Menu} APIs. This +guide shows how to create the three fundamental types of menus or action presentations on all +versions of Android:
-There are three types of application menus:
If you're developing for Android 2.3 or lower, users can +reveal the options menu panel by pressing the Menu button.
+On Android 3.0 and higher, items from the options menu are presented by the action bar as a combination of on-screen action +items and overflow options. Beginning with Android 3.0, the Menu button is deprecated (some +devices +don't have one), so you should migrate toward using the action bar to provide access to actions and +other options.
+See the section about Creating an Options Menu.
+When developing for Android 3.0 and higher, you should instead use the contextual action mode to enable actions on selected content. This mode displays +action items that affect the selected content in a bar at the top of the screen and allows the user +to select multiple items.
+See the section about Creating Contextual Menus.
+See the section about Creating a Popup Menu.
This document shows you how to create each type of menu, using XML to define the content of -the menu and callback methods in your activity to respond when the user selects an item.
+For all menu types, Android provides a standard XML format to define menu items. +Instead of building a menu in your activity's code, you should define a menu and all its items in an +XML menu resource. You can then +inflate the menu resource (load it as a {@link android.view.Menu} object) in your activity or +fragment.
-Instead of instantiating a {@link android.view.Menu} in your application code, you should -define a menu and all its items in an XML menu resource, then inflate the menu -resource (load it as a programmable object) in your application code. Using a menu resource to -define your menu is a good practice because it separates the content for the menu from your -application code. It's also easier to visualize the structure and content of a menu in XML.
+Using a menu resource is a good practice for a few reasons:
+To create a menu resource, create an XML file inside your project's res/menu/
+
To define the menu, create an XML file inside your project's res/menu/
directory and build the menu with the following elements:
<menu><menu> element in order to create a
<group>This example defines a menu with two items. Each item includes the attributes:
+The <item> element supports several attributes you can use to define an item's
+appearance and behavior. The items in the above menu include the following attributes:
There are many more attributes you can include in an {@code <item>}, including some that - specify how the item may appear in the Action Bar. For more information about the XML -syntax and attributes for a menu resource, see the Menu Resource reference.
+These are the most important attributes you should use, but there are many more available. +For information about all the supported attributes, see the Menu Resource document.
- - -From your application code, you can inflate a menu resource (convert the XML resource into a
-programmable object) using
-{@link android.view.MenuInflater#inflate(int,Menu) MenuInflater.inflate()}. For
-example, the following code inflates the game_menu.xml file defined above, during the
-{@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} callback method, to
-use the menu as the activity's Options Menu:
-@Override
-public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.game_menu, menu);
- return true;
-}
-
-
-The {@link android.app.Activity#getMenuInflater()} method returns a {@link
-android.view.MenuInflater} for the activity. With this object, you can call {@link
-android.view.MenuInflater#inflate(int,Menu) inflate()}, which inflates a menu resource into a
-{@link android.view.Menu} object. In this example, the menu resource defined by
-game_menu.xml
-is inflated into the {@link android.view.Menu} that was passed into {@link
-android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}. (This callback method for
-the Options Menu is discussed more in the next section.)
- Figure 1. Screenshot of the Options Menu in the -Browser.
-The Options Menu is where you should include basic activity actions and necessary navigation -items (for example, a button to open the application settings). Items in the Options Menu are -accessible in two distinct ways: the MENU button or in the Action Bar (on devices running Android 3.0 -or higher).
- -When running on a device with Android 2.3 and lower, the Options Menu appears at the bottom of -the screen, as shown in figure 1. When opened, the first visible portion of the Options Menu is -the icon menu. It holds the first six menu items. If you add more than six items to the -Options Menu, Android places the sixth item and those after it into the overflow menu, which the -user can open by touching the "More" menu item.
- -On Android 3.0 and higher, items from the Options Menu is placed in the Action Bar, which appears -at the top of the activity in place of the traditional title bar. By default all items from the -Options Menu are placed in the overflow menu, which the user can open by touching the menu icon -on the right side of the Action Bar. However, you can place select menu items directly in the -Action Bar as "action items," for instant access, as shown in figure 2.
- -When the Android system creates the Options Menu for the first time, it calls your -activity's {@link android.app.Activity#onCreateOptionsMenu(Menu) -onCreateOptionsMenu()} method. Override this method in your activity -and populate the {@link android.view.Menu} that is passed into the method, -{@link android.view.Menu} by inflating a menu resource as described above in Inflating a Menu Resource. For example:
- -
-@Override
-public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.game_menu, menu);
- return true;
-}
-
-
-
-Figure 2. Action bar from the Honeycomb Gallery app, including -navigation tabs and a camera action item (plus the overflow menu button).
-You can also populate the menu in code, using {@link android.view.Menu#add(int,int,int,int) -add()} to add items to the {@link android.view.Menu}.
- -Note: On Android 2.3 and lower, the system calls {@link -android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} to create the Options Menu -when the user opens it for the first time, but on Android 3.0 and greater, the system creates it as -soon as the activity is created, in order to populate the Action Bar.
- - -When the user selects a menu item from the Options Menu (including action items in the -Action Bar), the system calls your activity's -{@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} -method. This method passes the -{@link android.view.MenuItem} that the user selected. You can identify the menu item by calling -{@link android.view.MenuItem#getItemId()}, which returns the unique ID for the menu -item (defined by the {@code android:id} attribute in the menu resource or with an integer -given to the {@link android.view.Menu#add(int,int,int,int) add()} method). You can match this ID -against known menu items and perform the appropriate action. For example:
- -
-@Override
-public boolean onOptionsItemSelected(MenuItem item) {
- // Handle item selection
- switch (item.getItemId()) {
- case R.id.new_game:
- newGame();
- return true;
- case R.id.help:
- showHelp();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
-}
-
-
-In this example, {@link android.view.MenuItem#getItemId()} queries the ID for the selected menu -item and the switch statement compares the ID against the resource IDs that were assigned to menu -items in the XML resource. When a switch case successfully handles the menu item, it -returns {@code true} to indicate that the item selection was handled. Otherwise, the default -statement passes the menu item to the super class, in -case it can handle the item selected. (If you've directly extended the {@link android.app.Activity} -class, then the super class returns {@code false}, but it's a good practice to -pass unhandled menu items to the super class instead of directly returning {@code false}.)
- -Additionally, Android 3.0 adds the ability for you to define the on-click behavior for a menu -item in the menu resource XML, -using the {@code android:onClick} attribute. So you don't need to implement {@link -android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}. Using the {@code -android:onClick} attribute, you can specify a method to call when the user selects the menu item. -Your activity must then implement the method specified in the {@code android:onClick} attribute so -that it accepts a single {@link android.view.MenuItem} parameter—when the system calls this -method, it passes the menu item selected.
- -Tip: If your application contains multiple activities and
-some of them provide the same Options Menu, consider creating
-an activity that implements nothing except the {@link android.app.Activity#onCreateOptionsMenu(Menu)
-onCreateOptionsMenu()} and {@link android.app.Activity#onOptionsItemSelected(MenuItem)
-onOptionsItemSelected()} methods. Then extend this class for each activity that should share the
-same Options Menu. This way, you have to manage only one set of code for handling menu
-actions and each descendant class inherits the menu behaviors.
-If you want to add menu items to one of your descendant activities,
-override {@link android.app.Activity#onCreateOptionsMenu(Menu)
-onCreateOptionsMenu()} in that activity. Call {@code super.onCreateOptionsMenu(menu)} so the
-original menu items are created, then add new menu items with {@link
-android.view.Menu#add(int,int,int,int) menu.add()}. You can also override the super class's
-behavior for individual menu items.
Once the activity is created, the {@link android.app.Activity#onCreateOptionsMenu(Menu) -onCreateOptionsMenu()} method is -called only once, as described above. The system keeps and re-uses the {@link -android.view.Menu} you define in this method until your activity is destroyed. If you want to change -the Options Menu any time after it's first created, you must override the -{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()} method. This passes -you the {@link android.view.Menu} object as it currently exists. This is useful if you'd like to -remove, add, disable, or enable menu items depending on the current state of your application.
- -On Android 2.3 and lower, the system calls {@link android.app.Activity#onPrepareOptionsMenu(Menu) -onPrepareOptionsMenu()} each time the user opens the Options Menu.
- -On Android 3.0 and higher, you must call {@link android.app.Activity#invalidateOptionsMenu -invalidateOptionsMenu()} when you want to update the menu, because the menu is always open. The -system will then call {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()} -so you can update the menu items.
- -Note: -You should never change items in the Options Menu based on the {@link android.view.View} currently -in focus. When in touch mode (when the user is not using a trackball or d-pad), views -cannot take focus, so you should never use focus as the basis for modifying -items in the Options Menu. If you want to provide menu items that are context-sensitive to a {@link -android.view.View}, use a Context Menu.
- -If you're developing for Android 3.0 or higher, be sure to also read the Action Bar developer guide.
- - - - -A context menu is conceptually similar to the menu displayed when the user performs a -"right-click" on a PC. You should use a context menu to provide the user access to -actions that pertain to a specific item in the user interface. On Android, a context menu is -displayed when the user performs a "long press" (press and hold) on an item.
- -You can create a context menu for any View, though context menus are most often used for items in -a {@link android.widget.ListView}. When the user performs a long-press on an item in a ListView and -the list is registered to provide a context menu, the list item signals to the user that a context -menu is available by animating its background color—it transitions from -orange to white before opening the context menu. (The Contacts application demonstrates this -feature.)
- -If your activity uses a {@link android.widget.ListView} and -you want all list items to provide a context menu, register all items for a context -menu by passing the {@link android.widget.ListView} to {@link -android.app.Activity#registerForContextMenu(View) registerForContextMenu()}. For -example, if you're using a {@link android.app.ListActivity}, register all list items like this:
-registerForContextMenu({@link android.app.ListActivity#getListView()});
In order for a View to provide a context menu, you must "register" the view for a context -menu. Call {@link android.app.Activity#registerForContextMenu(View) registerForContextMenu()} and -pass it the {@link android.view.View} you want to give a context menu. When this View then -receives a long-press, it displays a context menu.
- -To define the context menu's appearance and behavior, override your activity's context menu -callback methods, {@link android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenuInfo) -onCreateContextMenu()} and -{@link android.app.Activity#onContextItemSelected(MenuItem) onContextItemSelected()}.
- -For example, here's an {@link -android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenuInfo) -onCreateContextMenu()} that uses the {@code context_menu.xml} menu resource:
-
-@Override
-public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.context_menu, menu);
-}
-
-
-{@link android.view.MenuInflater} is used to inflate the context menu from a menu resource. (You can also use -{@link android.view.Menu#add(int,int,int,int) add()} to add menu items.) The callback method -parameters include the {@link android.view.View} -that the user selected and a {@link android.view.ContextMenu.ContextMenuInfo} object that provides -additional information about the item selected. You might use these parameters to determine -which context menu should be created, but in this example, all context menus for the activity are -the same.
- -Then when the user selects an item from the context menu, the system calls {@link -android.app.Activity#onContextItemSelected(MenuItem) onContextItemSelected()}. Here is an example -of how you can handle selected items:
- -
-@Override
-public boolean onContextItemSelected(MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
- switch (item.getItemId()) {
- case R.id.edit:
- editNote(info.id);
- return true;
- case R.id.delete:
- deleteNote(info.id);
- return true;
- default:
- return super.onContextItemSelected(item);
- }
-}
-
-
-The structure of this code is similar to the example for Creating an -Options Menu, in which {@link android.view.MenuItem#getItemId()} queries the ID for the selected -menu item and a switch statement matches the item to the IDs that are defined in the menu resource. -And like the options menu example, the default statement calls the super class in case it -can handle menu items not handled here, if necessary.
- -In this example, the selected item is an item from a {@link android.widget.ListView}. To
-perform an action on the selected item, the application needs to know the list
-ID for the selected item (it's position in the ListView). To get the ID, the application calls
-{@link android.view.MenuItem#getMenuInfo()}, which returns a {@link
-android.widget.AdapterView.AdapterContextMenuInfo} object that includes the list ID for the
-selected item in the {@link android.widget.AdapterView.AdapterContextMenuInfo#id id} field. The
-local methods editNote() and deleteNote() methods accept this list ID to
-perform an action on the data specified by the list ID.
Note: Items in a context menu do not support icons or shortcut -keys.
- - - -A submenu is a menu that the user can open by selecting an item in another menu. You can add a -submenu to any menu (except a submenu). Submenus are useful when your application has a lot of -functions that can be organized into topics, like items in a PC application's menu bar (File, Edit, -View, etc.).
- -When creating your menu -resource, you can create a submenu by adding a {@code <menu>} element as the child of an -{@code <item>}. For example:
+You can add a submenu to an item in any menu (except a submenu) by adding a {@code <menu>} +element as the child of an {@code <item>}. Submenus are useful when your application has a lot +of functions that can be organized into topics, like items in a PC application's menu bar (File, +Edit, View, etc.). For example:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
- android:icon="@drawable/file"
android:title="@string/file" >
<!-- "file" submenu -->
<menu>
@@ -435,23 +202,625 @@ resource, you can create a submenu by adding a {@code <menu>} element
</menu>
-When the user selects an item from a submenu, the parent menu's respective on-item-selected -callback method receives the event. For instance, if the above menu is applied as an Options Menu, -then the {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} method -is called when a submenu item is selected.
- -You can also use {@link android.view.Menu#addSubMenu(int,int,int,int) addSubMenu()} to -dynamically add a {@link android.view.SubMenu} to an existing {@link android.view.Menu}. This -returns the new {@link android.view.SubMenu} object, to which you can add -submenu items, using {@link android.view.Menu#add(int,int,int,int) add()}
+To use the menu in your activity, you need to inflate the menu resource (convert the XML +resource into a programmable object) using {@link android.view.MenuInflater#inflate(int,Menu) +MenuInflater.inflate()}. In the following sections, you'll see how to inflate a menu for each +menu type.
-Here are some other features that you can apply to most menu items.
+
+ Figure 1. Options menu in the +Browser, on Android 2.3.
+The options menu is where you should include actions and other options that are relevant to the +current activity context, such as "Search," "Compose email," and "Settings."
+ +Where the items in your options menu appear on the screen depends on the version for which you've +developed your application:
+ +For more information about action items and other action bar behaviors, see the Action Bar guide.
+Note: Even if you're not developing for Android 3.0 or +higher, you can build your own action bar layout for a similar effect. For an example of how you can +support older versions of Android with an action bar, see the Action Bar Compatibility +sample.
+
+Figure 2. Action bar from the Honeycomb Gallery app, showing +navigation tabs and a camera action item (plus the action overflow button).
+ +You can declare items for the options menu from either your {@link android.app.Activity} +subclass or a {@link android.app.Fragment} subclass. If both your activity and fragment(s) +declare items for the options menu, they are combined in the UI. The activity's items appear +first, followed by those of each fragment in the order in which each fragment is added to the +activity. If necessary, you can re-order the menu items with the {@code android:orderInCategory} +attribute in each {@code <item>} you need to move.
+ +To specify the options menu for an activity, override {@link +android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragments provide their +own {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()} callback). In this +method, you can inflate your menu resource (defined in XML) into the {@link +android.view.Menu} provided in the callback. For example:
+ +
+@Override
+public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = {@link android.app.Activity#getMenuInflater()};
+ inflater.inflate(R.menu.game_menu, menu);
+ return true;
+}
+
+
+You can also add menu items using {@link android.view.Menu#add(int,int,int,int) +add()} and retrieve items with {@link android.view.Menu#findItem findItem()} to revise their +properties with {@link android.view.MenuItem} APIs.
+ +If you've developed your application for Android 2.3.x and lower, the system calls {@link +android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} to create the options menu +when the user opens the menu for the first time. If you've developed for Android 3.0 and higher, the +system calls {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} when +starting the activity, in order to show items to the action bar.
+ + + +When the user selects an item from the options menu (including action items in the action bar), +the system calls your activity's {@link android.app.Activity#onOptionsItemSelected(MenuItem) +onOptionsItemSelected()} method. This method passes the {@link android.view.MenuItem} selected. You +can identify the item by calling {@link android.view.MenuItem#getItemId()}, which returns the unique +ID for the menu item (defined by the {@code android:id} attribute in the menu resource or with an +integer given to the {@link android.view.Menu#add(int,int,int,int) add()} method). You can match +this ID against known menu items to perform the appropriate action. For example:
+ +
+@Override
+public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle item selection
+ switch (item.getItemId()) {
+ case R.id.new_game:
+ newGame();
+ return true;
+ case R.id.help:
+ showHelp();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+}
+
+
+When you successfully handle a menu item, return {@code true}. If you don't handle the menu +item, you should call the superclass implementation of {@link +android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} (the default +implementation returns false).
+ +If your activity includes fragments, the system first calls {@link +android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} for the activity then +for each fragment (in the order each fragment was added) until one returns +{@code true} or all fragments have been called.
+ +Tip: Android 3.0 adds the ability for you to define the on-click +behavior for a menu item in XML, using the {@code android:onClick} attribute. The value for the +attribute must be the name of a method defined by the activity using the menu. The method +must be public and accept a single {@link android.view.MenuItem} parameter—when the system +calls this method, it passes the menu item selected. For more information and an example, see the Menu Resource document.
+ +Tip: If your application contains multiple activities and +some of them provide the same options menu, consider creating +an activity that implements nothing except the {@link android.app.Activity#onCreateOptionsMenu(Menu) +onCreateOptionsMenu()} and {@link android.app.Activity#onOptionsItemSelected(MenuItem) +onOptionsItemSelected()} methods. Then extend this class for each activity that should share the +same options menu. This way, you can manage one set of code for handling menu +actions and each descendant class inherits the menu behaviors. +If you want to add menu items to one of the descendant activities, +override {@link android.app.Activity#onCreateOptionsMenu(Menu) +onCreateOptionsMenu()} in that activity. Call {@code super.onCreateOptionsMenu(menu)} so the +original menu items are created, then add new menu items with {@link +android.view.Menu#add(int,int,int,int) menu.add()}. You can also override the super class's +behavior for individual menu items.
+ + +After the system calls {@link android.app.Activity#onCreateOptionsMenu(Menu) +onCreateOptionsMenu()}, it retains an instance of the {@link android.view.Menu} you populate and +will not call {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} +again unless the menu is invalidated for some reason. However, you should use {@link +android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} only to create the initial +menu state and not to make changes during the activity lifecycle.
+ +If you want to modify the options menu based on +events that occur during the activity lifecycle, you can do so in +the {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()} method. This +method passes you the {@link android.view.Menu} object as it currently exists so you can modify it, +such as add, remove, or disable items. (Fragments also provide an {@link +android.app.Fragment#onPrepareOptionsMenu onPrepareOptionsMenu()} callback.)
+ +On Android 2.3.x and lower, the system calls {@link +android.app.Activity#onPrepareOptionsMenu(Menu) +onPrepareOptionsMenu()} each time the user opens the options menu (presses the Menu +button).
+ +On Android 3.0 and higher, the options menu is considered to always be open when menu items are +presented in the action bar. When an event occurs and you want to perform a menu update, you must +call {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} to request that the +system call {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.
+ +Note: +You should never change items in the options menu based on the {@link android.view.View} currently +in focus. When in touch mode (when the user is not using a trackball or d-pad), views +cannot take focus, so you should never use focus as the basis for modifying +items in the options menu. If you want to provide menu items that are context-sensitive to a {@link +android.view.View}, use a Context Menu.
+ + + + +
+ Figure 3. Screenshots of a floating context menu (left) +and the contextual action bar (right).
+A contextual menu offers actions that affect a specific item or context frame in the UI. You +can provide a context menu for any view, but they are most often used for items in a {@link +android.widget.ListView}, {@link android.widget.GridView}, or other view collections in which +the user can perform direct actions on each item.
+ +There are two ways to provide contextual actions:
+Note: The contextual action mode is available on Android 3.0 (API +level 11) and higher and is the preferred technique for displaying contextual actions when +available. If your app supports versions lower than 3.0 then you should fall back to a floating +context menu on those devices.
+ + +To provide a floating context menu:
+If your activity uses a {@link android.widget.ListView} or {@link android.widget.GridView} and +you want each item to provide the same context menu, register all items for a context menu by +passing the {@link android.widget.ListView} or {@link android.widget.GridView} to {@link +android.app.Activity#registerForContextMenu(View) registerForContextMenu()}.
+When the registered view receives a long-click event, the system calls your {@link +android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()} +method. This is where you define the menu items, usually by inflating a menu resource. For +example:
+
+@Override
+public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.context_menu, menu);
+}
+
+
+{@link android.view.MenuInflater} allows you to inflate the context menu from a menu resource. The callback method +parameters include the {@link android.view.View} +that the user selected and a {@link android.view.ContextMenu.ContextMenuInfo} object that provides +additional information about the item selected. If your activity has several views that each provide +a different context menu, you might use these parameters to determine which context menu to +inflate.
+When the user selects a menu item, the system calls this method so you can perform the +appropriate action. For example:
+ +
+@Override
+public boolean onContextItemSelected(MenuItem item) {
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
+ switch (item.getItemId()) {
+ case R.id.edit:
+ editNote(info.id);
+ return true;
+ case R.id.delete:
+ deleteNote(info.id);
+ return true;
+ default:
+ return super.onContextItemSelected(item);
+ }
+}
+
+
+The {@link android.view.MenuItem#getItemId()} method queries the ID for +the selected menu item, which you should assign to each menu item in XML using the {@code +android:id} attribute, as shown in the section about Defining a Menu in +XML.
+ +When you successfully handle a menu item, return {@code true}. If you don't handle the menu item, +you should pass the menu item to the superclass implementation. If your activity includes fragments, +the activity receives this callback first. By calling the superclass when unhandled, the system +passes the event to the respective callback method in each fragment, one at a time (in the order +each fragment was added) until {@code true} or {@code false} is returned. (The default +implementation for {@link android.app.Activity} and {@code android.app.Fragment} return {@code +false}, so you should always call the superclass when unhandled.)
+The contextual action mode is a system implementation of {@link android.view.ActionMode} that +focuses user interaction toward performing contextual actions. When a +user enables this mode by selecting an item, a contextual action bar appears at the top of +the screen to present actions the user can perform on the currently selected item(s). While this +mode is enabled, the user can select multiple items (if you allow it), deselect items, and continue +to navigate within the activity (as much as you're willing to allow). The action mode is disabled +and the contextual action bar disappears when the user deselects all items, presses the BACK button, +or selects the Done action on the left side of the bar.
+ +Note: The contextual action bar is not necessarily +associated with the action bar. They operate +independently, even though the contextual action bar visually overtakes the action bar +position.
+ +If you're developing for Android 3.0 (API level 11) or higher, you +should usually use the contextual action mode to present contextual actions, instead of the floating context menu.
+ +For views that provide contextual actions, you should usually invoke the contextual action mode +upon one of two events (or both):
+How your application invokes the contextual action mode and defines the behavior for each +action depends on your design. There are basically two designs:
+The following sections describe the setup required for each scenario.
+ + +If you want to invoke the contextual action mode only when the user selects specific +views, you should:
+For example:
+ +
+private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
+
+ // Called when the action mode is created; startActionMode() was called
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ // Inflate a menu resource providing context menu items
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.context_menu, menu);
+ return true;
+ }
+
+ // Called each time the action mode is shown. Always called after onCreateActionMode, but
+ // may be called multiple times if the mode is invalidated.
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false; // Return false if nothing is done
+ }
+
+ // Called when the user selects a contextual menu item
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_share:
+ shareCurrentItem();
+ mode.finish(); // Action picked, so close the CAB
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ // Called when the user exits the action mode
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ mActionMode = null;
+ }
+};
+
+
+Notice that these event callbacks are almost exactly the same as the callbacks for the options menu, except each of these also pass the {@link +android.view.ActionMode} object associated with the event. You can use {@link +android.view.ActionMode} APIs to make various changes to the CAB, such as revise the title and +subtitle with {@link android.view.ActionMode#setTitle setTitle()} and {@link +android.view.ActionMode#setSubtitle setSubtitle()} (useful to indicate how many items are +selected).
+ +Also notice that the above sample sets the {@code mActionMode} variable null when the +action mode is destroyed. In the next step, you'll see how it's initialized and how saving +the member variable in your activity or fragment can be useful.
+
+someView.setOnLongClickListener(new View.OnLongClickListener() {
+ // Called when the user long-clicks on someView
+ public boolean onLongClick(View view) {
+ if (mActionMode != null) {
+ return false;
+ }
+
+ // Start the CAB using the ActionMode.Callback defined above
+ mActionMode = getActivity().startActionMode(mActionModeCallback);
+ view.setSelected(true);
+ return true;
+ }
+});
+
+
+When you call {@link android.app.Activity#startActionMode startActionMode()}, the system returns +the {@link android.view.ActionMode} created. By saving this in a member variable, you can +make changes to the contextual action bar in response to other events. In the above sample, the +{@link android.view.ActionMode} is used to ensure that the {@link android.view.ActionMode} instance +is not recreated if it's already active, by checking whether the member is null before starting the +action mode.
+If you have a collection of items in a {@link android.widget.ListView} or {@link +android.widget.GridView} (or another extension of {@link android.widget.AbsListView}) and want to +allow users to perform batch actions, you should:
+ +For example:
+ +
+ListView listView = getListView();
+listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
+
+ @Override
+ public void onItemCheckedStateChanged(ActionMode mode, int position,
+ long id, boolean checked) {
+ // Here you can do something when items are selected/de-selected,
+ // such as update the title in the CAB
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ // Respond to clicks on the actions in the CAB
+ switch (item.getItemId()) {
+ case R.id.menu_delete:
+ deleteSelectedItems();
+ mode.finish(); // Action picked, so close the CAB
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ // Inflate the menu for the CAB
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.context, menu);
+ return true;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ // Here you can make any necessary updates to the activity when
+ // the CAB is removed. By default, selected items are deselected/unchecked.
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ // Here you can perform updates to the CAB due to
+ // an {@link android.view.ActionMode#invalidate} request
+ return false;
+ }
+});
+
+
+That's it. Now when the user selects an item with a long-click, the system calls the {@link +android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateActionMode()} +method and displays the contextual action bar with the specified actions. While the contextual +action bar is visible, users can select additional items.
+ +In some cases in which the contextual actions provide common action items, you might +want to add a checkbox or a similar UI element that allows users to select items, because they +might not discover the long-click behavior. When a user selects the checkbox, you +can invoke the contextual action mode by setting the respective list item to the checked +state with {@link android.widget.AbsListView#setItemChecked setItemChecked()}.
+ + + + +
+Figure 4. A popup menu in the Gmail app, anchored to the overflow +button at the top-right.
+A {@link android.widget.PopupMenu} is a modal menu anchored to a {@link android.view.View}. +It appears below the anchor view if there is room, or above the view otherwise. It's useful for:
+Note: This is not the same as a context menu, which is +generally for actions that affect selected content. For actions that affect selected +content, use the contextual action mode or floating context menu.
Note: {@link android.widget.PopupMenu} is available with API +level 11 and higher.
+ +If you define your menu in XML, here's how you can show the popup menu:
+For example, here's a button with the {@link android.R.attr#onClick android:onClick} attribute +that shows a popup menu:
+ ++<ImageButton + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_overflow_holo_dark" + android:contentDescription="@string/descr_overflow_button" + android:onClick="showPopup" /> ++ +
The activity can then show the popup menu like this:
+ +
+public void showPopup(View v) {
+ PopupMenu popup = new PopupMenu(this, v);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.actions, popup.getMenu());
+ popup.show();
+}
+
+
+In API level 14 and higher, you can combine the two lines that inflate the menu with {@link +android.widget.PopupMenu#inflate PopupMenu.inflate()}.
+ +The menu is dismissed when the user selects an item or touches outside the menu +area. You can listen for the dismiss event using {@link +android.widget.PopupMenu.OnDismissListener}.
+ +To perform an +action when the user selects a menu item, you must implement the {@link +android.widget.PopupMenu.OnMenuItemClickListener} interface and register it with your {@link +android.widget.PopupMenu} by calling {@link android.widget.PopupMenu#setOnMenuItemClickListener +setOnMenuItemclickListener()}. When the user selects an item, the system calls the {@link +android.widget.PopupMenu.OnMenuItemClickListener#onMenuItemClick onMenuItemClick()} callback in +your interface.
+ +For example:
+ +
+public void showMenu(View v) {
+ PopupMenu popup = new PopupMenu(this, v);
+
+ // This activity implements OnMenuItemClickListener
+ popup.setOnMenuItemClickListener(this);
+ popup.inflate(R.menu.actions);
+ popup.show();
+}
+
+@Override
+public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.archive:
+ archive(item);
+ return true;
+ case R.id.delete:
+ delete(item);
+ return true;
+ default:
+ return false;
+ }
+}
+
+
+
+A menu group is a collection of menu items that share certain traits. With a group, you can:
@@ -473,38 +842,41 @@ android.view.Menu#add(int,int,int,int) add()} method.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/item1"
- android:icon="@drawable/item1"
- android:title="@string/item1" />
+ <item android:id="@+id/menu_save"
+ android:icon="@drawable/menu_save"
+ android:title="@string/menu_save" />
<!-- menu group -->
- <group android:id="@+id/group1">
- <item android:id="@+id/groupItem1"
- android:title="@string/groupItem1" />
- <item android:id="@+id/groupItem2"
- android:title="@string/groupItem2" />
+ <group android:id="@+id/group_delete">
+ <item android:id="@+id/menu_archive"
+ android:title="@string/menu_archive" />
+ <item android:id="@+id/menu_delete"
+ android:title="@string/menu_delete" />
</group>
</menu>
-The items that are in the group appear the same as the first item that is not in a -group—all three items in the menu are siblings. However, you can modify the traits of the two -items in the group by referencing the group ID and using the methods listed above.
+The items that are in the group appear at the same level as the first item—all three items +in the menu are siblings. However, you can modify the traits of the two +items in the group by referencing the group ID and using the methods listed above. The system +will also never separate grouped items. For example, if you declare {@code +android:showAsAction="ifRoom"} for each item, they will either both appear in the action +bar or both appear in the action overflow.
-
- Figure 3. Screenshot of a submenu with checkable +
Figure 5. Screenshot of a submenu with checkable items.
A menu can be useful as an interface for turning options on and off, using a checkbox for stand-alone options, or radio buttons for groups of -mutually exclusive options. Figure 2 shows a submenu with items that are checkable with radio +mutually exclusive options. Figure 5 shows a submenu with items that are checkable with radio buttons.
-Note: Menu items in the Icon Menu (from the Options Menu) cannot +
Note: Menu items in the Icon Menu (from the options menu) cannot display a checkbox or radio button. If you choose to make items in the Icon Menu checkable, you must manually indicate the checked state by swapping the icon and/or text each time the state changes.
@@ -550,15 +922,15 @@ user selected it) with {@link android.view.MenuItem#isChecked()} and then set th
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.vibrate:
- case R.id.dont_vibrate:
- if (item.isChecked()) item.setChecked(false);
- else item.setChecked(true);
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
+ switch (item.getItemId()) {
+ case R.id.vibrate:
+ case R.id.dont_vibrate:
+ if (item.isChecked()) item.setChecked(false);
+ else item.setChecked(true);
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
}
@@ -575,30 +947,8 @@ you should store the data using Shared Preferences.
-To facilitate quick access to items in the Options Menu when the user's device has a hardware -keyboard, you can add quick-access shortcut keys using letters and/or numbers, with the -{@code android:alphabeticShortcut} and {@code android:numericShortcut} attributes in the {@code -<item>} element. You can also use the methods {@link -android.view.MenuItem#setAlphabeticShortcut(char)} and {@link -android.view.MenuItem#setNumericShortcut(char)}. Shortcut keys are not -case sensitive.
- -For example, if you apply the "s" character as an alphabetic shortcut to a "save" menu item, then -when the menu is open (or while the user holds the MENU button) and the user presses the "s" key, -the "save" menu item is selected.
- -This shortcut key is displayed as a tip in the menu item, below the menu item name -(except for items in the Icon Menu, which are displayed only if the user holds the MENU -button).
- -Note: Shortcut keys for menu items only work on devices with a -hardware keyboard. Shortcuts cannot be added to items in a Context Menu.
- - - -Sometimes you'll want a menu item to launch an activity using an {@link android.content.Intent} (whether it's an activity in your application or another application). When you know the intent you @@ -671,7 +1021,7 @@ addIntentOptions()}, it overrides any and all menu items by the menu group speci argument.
-You can also offer the services of your activity to other applications, so your application can be included in the menu of others (reverse the roles described above).
@@ -681,7 +1031,7 @@ filter as usual, but be sure to include the {@link android.content.Intent#CATEGO and/or {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} values for the intent filter category. For example:
-<intent-filter label="Resize Image">
+<intent-filter label="@string/resize_image">
...
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
diff --git a/docs/html/images/ui/menu-context.png b/docs/html/images/ui/menu-context.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6975fbf2df445fe312d9f349b7524462c1893d4
GIT binary patch
literal 45304
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