在Android系统之中,菜单一共有三类:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。
今天我们就用几个例子来分别介绍下菜单的使用
activity类中长见的方法
1
|
public void closeContextMenu()
|
普通
|
|
2
|
public void closeOptionsMenu()
|
普通
|
|
3
|
public boolean onContextItemSelected(MenuItem item)
|
普通
|
|
4
|
public void onContextMenuClosed(Menu menu)
|
普通
|
|
5
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
|
普通
|
|
6
|
public boolean onCreateOptionsMenu(Menu menu)
|
普通
|
当用户选择“Menu”按钮时调用此操作,可以生成一个选项菜单
|
7
|
public boolean onMenuItemSelected(int featureId, MenuItem item)
|
普通
|
|
8
|
public boolean onOptionsItemSelected(MenuItem item)
|
普通
|
当一个选项菜单中的某个菜单项被选中时触发此操作
|
9
|
public void onOptionsMenuClosed(Menu menu)
|
普通
|
|
10
|
public boolean onPrepareOptionsMenu(Menu menu)
|
普通
|
|
11
|
public void openOptionsMenu()
|
普通
|
|
12
|
public MenuInflater getMenuInflater()
|
普通
|
|
13
|
public void registerForContextMenu(View view)
|
普通
|
|
MENU的常用方法
1
|
public static final int FIRST
|
常量
|
|
2
|
public static final int NONE
|
常量
|
|
3
|
public abstract MenuItem add(int groupId, int itemId, int order, CharSequence title)
|
普通
|
此方法用于向菜单之中添加菜单项,参数作用:
|
4
|
public abstract MenuItem add(int groupId, int itemId, int order, int titleRes)
|
普通
|
|
5
|
public abstract SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes)
|
普通
|
|
6
|
public abstract SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title)
|
普通
|
|
7
|
public abstract void removeGroup(int groupId)
|
普通
|
|
8
|
public abstract void removeItem(int id)
|
普通
|
|
9
|
public abstract void clear()
|
普通
|
|
10
|
public abstract void close()
|
普通
|
|
11
|
public abstract MenuItem getItem(int index)
|
普通
|
|
12
|
public abstract int size()
|
普通
|
|
MuenItem中常用的方法
1
|
public abstract int getGroupId()
|
普通
|
|
2
|
public abstract Drawable getIcon()
|
普通
|
|
3
|
public abstract int getItemId()
|
普通
|
|
4
|
public abstract int getOrder()
|
普通
|
|
5
|
public abstract SubMenu getSubMenu()
|
普通
|
|
6
|
public abstract CharSequence getTitle()
|
普通
|
|
7
|
public abstract boolean isCheckable()
|
普通
|
|
8
|
public abstract boolean isChecked()
|
普通
|
|
9
|
public abstract boolean isEnabled()
|
普通
|
|
10
|
public abstract boolean isVisible()
|
普通
|
|
11
|
public abstract MenuItem setCheckable(boolean checkable)
|
普通
|
|
12
|
public abstract MenuItem setChecked(boolean checked)
|
普通
|
|
13
|
public abstract MenuItem setEnabled(boolean enabled)
|
普通
|
|
14
|
public abstract MenuItem setIcon(Drawable icon)
|
普通
|
|
15
|
public abstract MenuItem setIcon(int iconRes)
|
普通
|
|
16
|
public abstract MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener)
|
普通
|
|
17
|
public abstract MenuItem setTitle(CharSequence title)
|
普通
|
|
18
|
public abstract MenuItem setVisible(boolean visible)
|
普通
|
|
19
|
public abstract ContextMenu.ContextMenuInfo getMenuInfo()
|
普通
|
|
以上方法是按英文Api翻译,难免有错误之处,欢迎大家指正
1.选项菜单的使用
<span style="font-size:18px;">package com.example.menu1; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 此方法可以调用menu文件进行配置 // getMenuInflater().inflate(R.menu.main, menu); // add(int groupId, int itemId, int order, Charsequence titleRes) // 菜单组ID itemID 指令指向ID 菜单标题 menu.add(1000, 1, 1, "增加").setIcon(android.R.drawable.ic_menu_add); menu.add(1000, 2, 2, "上传").setIcon( android.R.drawable.ic_menu_upload_you_tube); menu.add(1000, 3, 3, "保存").setIcon(android.R.drawable.ic_menu_save); menu.add(1000, 4, 4, "删除").setIcon(android.R.drawable.ic_menu_delete); menu.add(1000, 5, 5, "详情").setIcon( android.R.drawable.ic_menu_info_details); menu.add(1000, 6, 6, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(1000, 7, 7, "日期").setIcon( android.R.drawable.ic_menu_my_calendar); return true; } @Override // 菜单选项选中处理事件 public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "您点击了增加菜单", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "您点击了上传菜单", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "您点击了保存菜单", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "您点击了删除菜单", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "您点击了详情菜单", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "您点击了分享菜单", 2).show(); break; case 7: Toast.makeText(MainActivity.this, "您点击了日期菜单", 2).show(); break; default: break; } return true; } @Override // 菜单打开时操作 public void openOptionsMenu() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单打开", 2).show(); } @Override // 菜单关闭时操作 public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override // 菜单准备时操作 public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "准备操作", 2).show(); return true; } } </span>
也可以使用xml文件对菜单进行配置
<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" > <group android:id="@+id/group1" > <item android:id="@+id/item1" android:title="文件"> </item> <item android:id="@+id/item2" android:title="编辑"> </item> <item android:id="@+id/item3" android:title="查询"> </item> <item android:id="@+id/item4" android:title="工程"> </item> <item android:id="@+id/item5" android:title="运行"> </item> <item android:id="@+id/item6" android:title="窗口"> </item> <item android:id="@+id/item7" android:title="帮助"> </item> <item android:id="@+id/item8" android:title="文档"> </item> </group> </menu></span>
JAVA文件
<span style="font-size:18px;">package com.example.menu1; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 此方法可以调用menu文件进行配置 getMenuInflater().inflate(R.menu.main, menu); return true; } @Override // 菜单选项选中处理事件 public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "您点击了增加菜单", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "您点击了上传菜单", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "您点击了保存菜单", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "您点击了删除菜单", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "您点击了详情菜单", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "您点击了分享菜单", 2).show(); break; case 7: Toast.makeText(MainActivity.this, "您点击了日期菜单", 2).show(); break; default: break; } return true; } @Override // 菜单打开时操作 public void openOptionsMenu() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单打开", 2).show(); } @Override // 菜单关闭时操作 public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override // 菜单准备时操作 public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "准备操作", 2).show(); return true; } } </span>
2.上下文菜单的使用
接下来我们就使用listview来来进行演示上下文菜单,即长按 选项弹出菜单
就是讲contexMenu与listview相绑定,来相应用户的点击操作
XML文件
<span style="font-size:18px;">package com.example.menu2; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private String data[] = { "房泽龙", "22", "河南大学", "教育科学学院", "河南平顶山", "河南开封" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this);//创建ListView listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, data));//绑定Adapter super.registerForContextMenu(listView);//为listview注册菜单 super.setContentView(listView); //设置显示的内容 } @Override//事件处理 public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "复制操作", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "详情操作", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "删除操作", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "关闭操作", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "分享操作", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "编辑操作", 2).show(); break; default: break; } return true; } @Override public void onContextMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override//增加菜单操作 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub menu.setHeaderTitle("信息操作"); menu.add(1000, 1, 1, "复制").setIcon(android.R.drawable.ic_menu_agenda); menu.add(1000, 2, 2, "详情").setIcon(android.R.drawable.ic_menu_info_details); menu.add(1000, 3, 3, "删除").setIcon(android.R.drawable.ic_menu_delete); menu.add(1000, 4, 4, "关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel); menu.add(1000, 5, 5, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(1000, 6, 6, "编辑").setIcon(android.R.drawable.ic_menu_edit); } } </span>
同样选项菜单的配置也可以使用xml文件配置
<span style="font-size:18px;"> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1"> <item android:id="@+id/a1" android:title="复制"></item> <item android:id="@+id/a2" android:title="详情"></item> <item android:id="@+id/a3" android:title="删除"></item> <item android:id="@+id/a4" android:title="分享"></item> <item android:id="@+id/a5" android:title="发送"></item> </group> </menu> </span>
JAVA文件
<span style="font-size:18px;">package com.example.menu3; import android.os.Bundle; import android.app.Activity; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private String data[] = { "房泽龙", "22", "河南大学", "教育科学学院", "河南平顶山", "河南开封" };//数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this);//创建listview listView.setAdapter(new ArrayAdapter<String>(this,//设置adapter android.R.layout.simple_expandable_list_item_1, data)); super.registerForContextMenu(listView);//注册选项菜单 super.setContentView(listView); //设置显示的内容 } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.a1: Toast.makeText(MainActivity.this, "复制操作", 2).show(); break; case R.id.a2: Toast.makeText(MainActivity.this, "详情操作", 2).show(); break; case R.id.a3: Toast.makeText(MainActivity.this, "删除操作", 2).show(); break; case R.id.a4: Toast.makeText(MainActivity.this, "关闭操作", 2).show(); break; case R.id.a5: Toast.makeText(MainActivity.this, "分享操作", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "编辑操作", 2).show(); break; default: break; } return true; } @Override public void onContextMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.getMenuInflater().inflate(R.menu.main, menu);//将菜单与xml文件中的菜单选项相绑定 super.onCreateContextMenu(menu, v, menuInfo);//创建菜单 menu.setHeaderTitle("信息操作");//设置上下文菜单标题 } } </span>
上下文菜单多用电话本,信息等地方,来实现对所选项的进一步操作
3.子菜单操作
所谓子菜单就是点击一个菜单后不会立马进行相关事件操作,而是由跳出第二个菜单让用户进行选择,点击二级菜单后再进行事件操作,这就是子菜单
1
|
public abstract MenuItem getItem()
|
普通
|
得到一个子菜单所属的父菜单对象
|
2
|
public abstract SubMenu setHeaderIcon(int iconRes)
|
普通
|
设置菜单的显示图标
|
3
|
public abstract SubMenu setHeaderTitle(int titleRes)
|
普通
|
设置子菜单的显示标题
|
4
|
public abstract SubMenu setHeaderTitle(CharSequence title)
|
普通
|
设置子菜单的显示标题
|
5
|
public abstract SubMenu setIcon(int iconRes)
|
普通
|
设置每个子菜单项的图标
|
<span style="font-size:18px;">package com.example.menu4; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class MainActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { // 显示菜单 SubMenu fileMenu = menu.addSubMenu("文件"); // 子菜单 SubMenu editMenu = menu.addSubMenu("编辑"); // 子菜单 fileMenu.add(1000, 1, 1, "新建") ; // 子菜单项 fileMenu.add(1000, 2, 2, "打开") ; // 子菜单项 fileMenu.add(1000, 3, 3, "保存") ; // 子菜单项 editMenu.add(1000, 4, 4, "撤消"); // 子菜单项 editMenu.add(1000, 5, 5, "恢复"); // 子菜单项 return true ; } @Override public boolean onOptionsItemSelected(MenuItem item) { // 选中某个菜单项 switch (item.getItemId()) { // 判断菜单项ID case 1: Toast.makeText(this, "您选择的是“添加联系人”项。", Toast.LENGTH_LONG).show(); break; case 2: Toast.makeText(this, "您选择的是“查看详情”项。", Toast.LENGTH_LONG).show(); break; case 3: Toast.makeText(this, "您选择的是“删除信息”项。", Toast.LENGTH_LONG).show(); break; case 4: Toast.makeText(this, "您选择的是“另存为”项。", Toast.LENGTH_LONG).show(); break; case 5: Toast.makeText(this, "您选择的是“编辑”项。", Toast.LENGTH_LONG).show(); break; } return false; } } </span>同样,子菜单的选项也可以使用xml文件进行配置
<span style="font-size:18px;"> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1"> <item android:id="@+id/item1" android:title="新建"></item> <item android:id="@+id/item2" android:title="打开"></item> <item android:id="@+id/item3" android:title="保存"></item> </group> </menu> </span>
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <group android:id="@+id/group1"> <item android:id="@+id/item4" android:title="撤销"></item> <item android:id="@+id/item5" android:title="恢复"></item> </group> </menu> </span>
JAVA文件
<span style="font-size:18px;">package com.example.menu5; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class MainActivity extends Activity { @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.item1: Toast.makeText(MainActivity.this, "新建", 2).show(); break; case R.id.item2: Toast.makeText(MainActivity.this, "打开", 2).show(); break; case R.id.item3: Toast.makeText(MainActivity.this, "保存", 2).show(); break; case R.id.item4: Toast.makeText(MainActivity.this, "撤销", 2).show(); break; case R.id.item5: Toast.makeText(MainActivity.this, "恢复", 2).show(); break; default: break; } return true; } @Override public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. SubMenu fileMenu = menu.addSubMenu("文件"); SubMenu editMenu = menu.addSubMenu("编辑"); getMenuInflater().inflate(R.menu.file_menu, fileMenu);//将文件子菜单与xml绑定 getMenuInflater().inflate(R.menu.edit_menu, editMenu);//将编辑子菜单与xml绑定 return true; } } </span>
在android中菜单是不可获取的一部分,掌握好菜单的使用是android开发者的必备技能.
下节预报
AnalogClock与DigitalClock时钟组件