Hướng dẫn tạo menu trong Android
Trang 1@2011 Mihail L Sichitiu 1
Android
Introduction
GUI Menu
Trang 2@2011 Mihail L Sichitiu 2
Goal
options/sub/context menus
<option menu> <sub-menu> <context menu>
Automatically fill “Hi!”
in the EditText Plus menu will
also open a sub-menu
Display
messages when
a menu clicked
Trang 3Menu Composition
Plus
Home
Pre
Next
<option menu>
Sub1 Sub2
Hi Hola
Hello
<sub-menu>
<context menu from EditText>
Long press
in EditText
Trang 4@2011 Mihail L Sichitiu 4
Create HelloMenu Project
Create the two TextViews
and an EditText
Create “ menu ” folder in
res/
Create menu.xml in
res/menu/ (New > Other >
Android XML File)
Create context_menu.xml
in res/menu/
Trang 5<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menuItemPlus" android:title="@string/plus"
android:icon="@drawable/plus" >
<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>
Sub-menu items
Option menu items
Define Option menu and sub-menu
Trang 6@2011 Mihail L Sichitiu 6
res/menu/context.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<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>
Define context menu for EditText
Trang 7<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Click Menu Button ! </string>
<string name="app_name">Android Menu Example</string>
<string name="plus">Plus</string>
<string name="pre">Pre</string>
<string name="next">Next</string>
<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>
Define constant strings used in the application
Trang 8@2011 Mihail L Sichitiu 8
icons
Place icons used in menu.xml in res/drawable/
icons
Download icons at:
http://www4.ncsu.edu/~mlsichit/UCAB/resources.html
Trang 9Inflating a option menu
resource
Inflating a menu resource (menu.xml) by adding
onCreateOptionsMenu(Menu menu) in the main Activity.
Menu items in menu.xml will appear when the user touches the
MENU button
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
public boolean onCreateOptionsMenu (Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu menu , menu);
return true;
}
Trang 10@2011 Mihail L Sichitiu 10
Response to user action
onOptionsItemSelected(Menu menu) in the
main Activity.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuItemPlus:
Toast.makeText(this, "Plus Button Clicked !", Toast.LENGTH_SHORT).show();
Log.i(TAG,"menuItemPlus");
return true;
:
:
case R.id.menuItemNext:
Toast.makeText(this, "Next Button Clicked !", Toast.LENGTH_SHORT).show();
Log.i(TAG,"menuItemNext");
return true;
}
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuItemPlus:
Toast.makeText(this, "Plus Button Clicked !", Toast.LENGTH_SHORT).show();
Log.i(TAG,"menuItemPlus");
return true;
:
:
case R.id.menuItemNext:
Toast.makeText(this, "Next Button Clicked !", Toast.LENGTH_SHORT).show();
Log.i(TAG,"menuItemNext");
return true;
}
return false;
}
Trang 11Register View for a context
menu
passing it a View (an EditText in this example)
you assign it a context menu
it displays a context menu.
public class AndroidMenuExampleActivity extends Activity {
private EditText mOutEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mOutEditText = (EditText) findViewById(R.id.editText);
registerForContextMenu(mOutEditText);
}
:
:
public class AndroidMenuExampleActivity extends Activity {
private EditText mOutEditText ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mOutEditText = (EditText) findViewById(R.id.editText);
registerForContextMenu(mOutEditText);
}
:
:
Trang 12@2011 Mihail L Sichitiu 12
Define context menu’s
appearance
By overriding the activity's context menu create callback method,
onCreateContextMenu().
@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);
}
@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);
}
Trang 13Define context menu’s
behavior
method for context menu , onContextItemSelected().
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.i(TAG,"ContextItem selected");
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.menuItemHi:
mOutEditText.setText( this.getResources().getText( R.string.hi_msg) );
return true;
case R.id.menuItemHola:
:
:
default:
return super.onContextItemSelected(item);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
Log.i(TAG,"ContextItem selected");
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.menuItemHi:
mOutEditText.setText( this.getResources().getText( R.string.hi_msg) );
return true;
case R.id.menuItemHola:
:
default:
return super.onContextItemSelected(item);
}
}