在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() |
普通 |
取得MenuInflater类的对象 |
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) |
普通 |
此方法用于向菜单之中添加菜单项,参数作用: · groupId:菜单所在的组编号; · itemId:菜单项的ID; · order:菜单的出现顺序; · 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() |
普通 |
得到菜单项上的ID |
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时钟组件
时间: 2024-11-07 19:10:51