Android Introduction
GUI Menu
@2011 Mihail L. Sichitiu
1 Many thanks to Jun Bum Lim for his help with this tutorial.
Goal
Create an application that supports options/sub/context menus
Display messages when a menu clicked
Plus menu will also open a sub-menu <option menu> <sub-menu>
@2011 Mihail L. Sichitiu
Automatically fill Hi! in the EditText
<context menu>
2
Menu Composition
Sub1 Plus Sub2 Hi Hola Hello Long press in EditText
Home
<sub-menu>
Pre
Next <option menu> <context menu from EditText>
@2011 Mihail L. Sichitiu 3
Create HelloMenu Project
Create the two TextViews and an EditText Create menu folder in res/ Create [Link] in res/menu/ (New > Other > Android XML File) Create context_menu.xml in res/menu/
@2011 Mihail L. Sichitiu
res/menu/[Link]
Define Option menu and sub-menu
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="[Link] <item android:id="@+id/menuItemPlus" android:title="@string/plus" android:icon="@drawable/plus" > Sub-menu items <menu> <item android:id="@+id/menuItemSub1" android:title="@string/sub1"></item> <item android:id="@+id/menuItemSub2" android:title="@string/sub2"></item> </menu> </item> <item android:icon="@drawable/home" android:id="@+id/menuItemHome" android:title="@string/home"></item> <item android:icon="@drawable/pre" android:id="@+id/menuItemPre" android:title="@string/pre"></item> <item android:icon="@drawable/next" android:id="@+id/menuItemNext" android:title="@string/next"></item> </menu>
Option menu items
@2011 Mihail L. Sichitiu 5
res/menu/[Link]
Define context menu for EditText
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="[Link] <item android:id="@+id/menuItemHi" android:title="@string/hi_msg"></item> <item android:id="@+id/menuItemHola" android:title="@string/hola_msg"></item> <item android:id="@+id/menuItemHello" android:title="@string/hello_msg"></item> </menu>
@2011 Mihail L. Sichitiu
res/values/[Link]
Define constant strings used in the application
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Click Menu Button ! </string> <string name="app_name">Android Menu Example</string> <string <string <string <string name="plus">Plus</string> name="pre">Pre</string> name="next">Next</string> name="home">Home</string>
<string name="sub1">Sub1</string> <string name="sub2">Sub2</string>
<string name="hi_msg">Hi !</string> <string name="hola_msg">Hola !</string> <string name="hello_msg">Hello !</string> </resources>
@2011 Mihail L. Sichitiu
icons
Place icons used in [Link] in res/drawable/
Download icons at: [Link]
icons
@2011 Mihail L. Sichitiu
Inflating a option menu resource
Inflating a menu resource ([Link]) by adding onCreateOptionsMenu(Menu menu) in the main Activity. Menu items in [Link] will appear when the user touches the MENU button
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); [Link]([Link], menu); return true; }
@2011 Mihail L. Sichitiu
Response to user action
Response to menu click events by overriding onOptionsItemSelected(Menu menu) in the main Activity.
@Override public boolean onOptionsItemSelected(MenuItem item) { switch ([Link]()) { case [Link]: [Link](this, "Plus Button Clicked !", Toast.LENGTH_SHORT).show(); Log.i(TAG,"menuItemPlus"); return true; : : case [Link]: [Link](this, "Next Button Clicked !", Toast.LENGTH_SHORT).show(); Log.i(TAG,"menuItemNext"); return true; } return false; }
@2011 Mihail L. Sichitiu
10
Register View for a context menu
By calling registerForContextMenu() and passing it a View (an EditText in this example) you assign it a context menu. When this View (EditText) receives a long-press, it displays a context menu.
private EditText mOutEditText; @Override public void onCreate(Bundle savedInstanceState) { [Link](savedInstanceState); setContentView([Link]); mOutEditText = (EditText) findViewById([Link]); registerForContextMenu(mOutEditText); } : :
@2011 Mihail L. Sichitiu 11
public class AndroidMenuExampleActivity extends Activity {
Define context menus appearance
By overriding the activity's context menu create callback method, onCreateContextMenu().
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { [Link](menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); [Link]([Link].context_menu, menu); }
@2011 Mihail L. Sichitiu
12
Define context menus behavior
By overriding your activity's menu selection callback method for context menu , onContextItemSelected().
@Override public boolean onContextItemSelected(MenuItem item) { Log.i(TAG,"ContextItem selected"); AdapterContextMenuInfo info = (AdapterContextMenuInfo) [Link](); switch ([Link]()) { case [Link]: [Link]( [Link]().getText( [Link].hi_msg) ); return true; case [Link]: : : default: return [Link](item); } }
@2011 Mihail L. Sichitiu
13