Android里面也可用XML定义菜单资源,菜单分两种,一种是OptionMenu(点系统"Menu"键出来),另一种是ContextMenu必须长按才能出来;
optionMenu菜单的使用
1,创建选项菜单; onCreateOptionsMenu(Menu menu)
//创建选项菜单的方法 @Override public boolean onCreateOptionsMenu(Menu menu) { //menu.add(groupId, itemId, order, title) //goupid 菜单项所在组的标示符 //itemid 唯一表示的ID //order 菜单栏项的显示顺序 //title 菜单项相似的文本 MenuItem menu1 = menu.add(0, 0, 0, "item1"); menu1.setAlphabeticShortcut('a');//分配快捷键的方法 menu1.setIcon(R.drawable.ic_launcher); //设置图标 MenuItem menu2 = menu.add(0, 1, 1, "item2"); menu1.setAlphabeticShortcut('b');//分配快捷键的方法 menu1.setIcon(R.drawable.ic_launcher); //设置图标 MenuItem menu3 = menu.add(0, 2, 2, "item3"); menu1.setAlphabeticShortcut('c');//分配快捷键的方法 menu1.setIcon(R.drawable.ic_launcher); //设置图标 //使用简单方式创建三个菜单栏 menu.add(0,4,4,"item4"); menu.add(0,5,5,"item5"); menu.add(0,6,6,"item6"); return true; }
2,添加选项菜单的监听器onOptionsItemSelected(MenuItem item);
@Override//选项菜单的监听器 public boolean onOptionsItemSelected(MenuItem item) { //MenuChoice方法接收Menuite方法的一个参数,并检查其ID确定被选中的菜单项 int id = item.getItemId(); switch (id) { case 0: Toast.makeText(this, "选中item1", 1000).show(); break; case 1: Toast.makeText(this, "选中item2", 1000).show(); break; case 2: Toast.makeText(this, "选中item3", 1000).show(); break; case 4: Toast.makeText(this, "选中item4", 1000).show(); break; case 5: Toast.makeText(this, "选中item5", 1000).show(); break; case 6: Toast.makeText(this, "选中item6", 1000).show(); break; } return false; }
ContextMenu菜单的使用;
上下文菜单的使用必须是长按才会出来
1,定义布局上下文菜单的布局文件menu_contextemnu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/rename" android:title="修改名字" /> <item android:id="@+id/dele" android:title="删除" /> <item android:id="@+id/open" android:title="打开" /> <item android:id="@+id/detailed" android:title="详细" /> </menu>
2,定义主配置文件 acticity_main.xml
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onclick" android:text="上下文菜单" />
3,java类的使用
//上下文菜单的使用 public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_main); //获得按钮 Button btn=(Button)this.findViewById(R.id.btn); btn.setOnCreateContextMenuListener(this); //上下文菜单的使用必须要先注册组件 this.registerForContextMenu(btn); } public void onclick(View v){ } @Override//创建上下文菜单 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.layout.menu_contextemnu, menu); } @Override//创建上下文监听器 public boolean onContextItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.rename: Toast.makeText(this, "重命名", 1000).show(); break; case R.id.dele: Toast.makeText(this, "删除", 1000).show(); break; case R.id.detailed: Toast.makeText(this, "详细", 1000).show(); break; case R.id.open: Toast.makeText(this, "打开", 1000).show(); break; } return false; } }
3, 选项菜单和上下文菜单监听器;
onMenuItemSelected可以同时使用在有少量的选项菜单和上下文的情况,下面一个方法就搞定, 如果出现上下文监听器(onContextItemSelected),选项监听器(onOptionsItemSelected) ,onMenuItemSelected 则只会执行onMenuItemSelected 监听器
@Override // 菜单被选中的时候会执行 public boolean onMenuItemSelected(int featureId, MenuItem item) { // TODO Auto-generated method stub return true; }