(一)选项菜单
1、简单的创建菜单:
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 super.onCreateOptionsMenu(menu); 4 5 // 添加菜单 6 menu.add("菜单选项1"); 7 /* 8 * pram1:组号 pram2:唯一的ID号 pram3:排序号 pram4:标题 9 */ 10 menu.add(1, Menu.FIRST, Menu.FIRST, "菜单选项2"); 11 12 // 希望显示菜单就返回true 13 return true; 14 }
2、菜单的分组以及简单属性:
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 super.onCreateOptionsMenu(menu); 4 5 int group1 = 1; 6 int group2 = 2; 7 menu.add(group1, 1, 1, "item1"); 8 menu.add(group1, 2, 2, "item2"); 9 menu.add(group2, 3, 3, "item3"); 10 menu.add(group2, 4, 4, "item4"); 11 12 // menu.removeGroup(group1);//删除一个组 13 // menu.setGroupVisible(group1, false);//设置可见性 14 // menu.setGroupEnabled(group2, false);//设置是否可点 15 // menu.setGroupCheckable(group2, true, t);//设置一组菜单的勾选情况 16 return true; 17 }
3、响应菜单
一、通过onOptionsItemSelected方法
1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 // 响应每个菜单项(通过菜单项的ID) 4 switch (item.getItemId()) { 5 case 1: 6 // do something here 7 break; 8 case 2: 9 // do something here 10 break; 11 case 3: 12 // do something here 13 break; 14 case 4: 15 Toast.makeText(this, "hello", 0).show(); 16 break; 17 default: 18 // 对没有处理的事件,交给父类来处理 19 return super.onOptionsItemSelected(item); 20 } 21 //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了 22 return true; 23 }
二、通过监听
1 //第一步:创建监听器类 2 class MyMenuItemClickListener implements OnMenuItemClickListener { 3 @Override 4 publicboolean onMenuItemClick(MenuItem item) { 5 // do something here... 6 return true; //finish handling 7 } 8 } 9 //第二步:为菜单项注册监听器 10 menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
三、通过Intent
(二)子菜单subMenu
注意:Menu可以包含多个SubMenu及menuItem,SubMenu可以包含多个MenuItem,,但是SubMenu不能包含SubMenu。
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 //一个menu中可以添加多个子菜单 4 SubMenu subMenu=menu.addSubMenu(1,1, 0, "子菜单"); 5 6 //在子菜单中添加多个菜单选项 7 MenuItem menuItem1=subMenu.add(1, 1, 0, "菜单选项1"); 8 subMenu.add(1, 2, 1,"菜单选项2"); 9 subMenu.add(1, 3, 2,"菜单选项3"); 10 subMenu.add(1, 4, 3,"菜单选项4"); 11 12 //子菜单不支持显示图标,尽管这样设置不会报错 13 subMenu.setIcon(R.drawable.ic_launcher); 14 15 //设置菜单选项的图标 16 menuItem1.setIcon(R.drawable.ic_launcher); 17 return true; 18 }
(三)上下文菜单ContextMenu
1 package com.zzw.contextMenu; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.util.Log; 6 import android.view.ContextMenu; 7 import android.view.ContextMenu.ContextMenuInfo; 8 import android.view.MenuItem; 9 import android.view.View; 10 import android.widget.ArrayAdapter; 11 import android.widget.ListView; 12 import android.widget.Toast; 13 14 public class MainActivity extends Activity { 15 private static final String TAG = "MainActivity"; 16 ListView listView; 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 Log.d(TAG, "onCreate"); 21 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 listView = (ListView) findViewById(R.id.listView); 25 26 simpleShowList(); 27 //1.在activity的onCreate方法中为一个view注册上下文菜单 28 this.registerForContextMenu(listView); 29 30 } 31 32 //2.在onCreateContextMenu中生成上下文菜单。 33 @Override 34 public void onCreateContextMenu(ContextMenu menu, View v, 35 ContextMenuInfo menuInfo) { 36 Log.d(TAG, "onCreateContextMenu_start"); 37 38 menu.setHeaderTitle("上下文菜单标题"); 39 menu.add(0, 1, 0, "选项1"); 40 menu.add(0, 2, 0, "选项2"); 41 menu.add(0, 3, 0, "选项3"); 42 43 Log.d(TAG, "onCreateContextMenu_stop"); 44 } 45 46 //3.在onContextItemSelected中响应上下文菜单项。 47 @Override 48 public boolean onContextItemSelected(MenuItem item) { 49 Log.d(TAG, "onContextItemSelected_start"); 50 int item_id = item.getItemId(); 51 switch (item_id) { 52 case 1: 53 Toast.makeText(this, "我是上下文菜单选项1", 0).show(); 54 break;
//如果想要处理ListView中的数据通过AdapterContextMenuInfo info=(AdapterContextMenuInfo) item.getMenuInfo()获得info,通过info得到listView中的id,position等 55 case 2: 56 57 break; 58 case 3: 59 60 break; 61 62 default: 63 return super.onContextItemSelected(item); 64 } 65 Log.d(TAG, "onContextItemSelected_stop"); 66 return true; 67 } 68 69 private void simpleShowList() { 70 Log.d(TAG, "simpleShowList_start"); 71 String[] showList = { "显示1", "显示2", "显示3", "显示4" }; 72 73 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 74 android.R.layout.simple_expandable_list_item_1, showList); 75 76 listView.setAdapter(adapter); 77 Log.d(TAG, "simpleShowList_stop"); 78 } 79 80 }
(四)通过XML文件添加菜单
1.在res文件下创建menu文件夹,一般默认有的,在里面new出一个Android xml File来编辑自己的菜单
2.编辑自己的xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 3 4 <!-- group是分组 --> 5 <group android:id="@+id/group1" > 6 7 <!-- item是一个菜单选项 --> 8 <item 9 android:id="@+id/item1" 10 android:title="菜单选项1(子菜单)"> 11 <!-- 在一个item中添加一个menu就是子菜单 --> 12 <menu> 13 <!-- 子菜单中的菜单选项 --> 14 <item 15 android:icon="@drawable/ic_launcher" 16 android:id="@+id/item1_1" 17 android:title="子菜单内选项1"/> 18 <item 19 android:id="@+id/item1_2" 20 android:title="子菜单内选项2"/> 21 </menu> 22 </item> 23 <item 24 android:id="@+id/item2" 25 android:title="菜单选项2"> 26 </item> 27 </group> 28 <group android:id="@+id/group2" > 29 <item 30 android:id="@+id/item3" 31 android:title="菜单选项4"> 32 </item> 33 <item 34 android:id="@+id/item4" 35 android:title="菜单选项5"> 36 </item> 37 </group> 38 39 </menu>
3.在activity中获取:
1 @Override 2 public boolean onCreateOptionsMenu(Menu menu) { 3 MenuInflater in = getMenuInflater(); 4 in.inflate(R.menu.main, menu); 5 return true; 6 } 7 8 @Override 9 public boolean onOptionsItemSelected(MenuItem item) { 10 switch (item.getItemId()) { 11 case R.id.item1: 12 13 break; 14 case R.id.item2: 15 16 break; 17 18 default: 19 return super.onOptionsItemSelected(item); 20 } 21 22 return true; 23 }
一些基本的属性:
设置菜单icon
1 <item 2 android:id="@+id/item1" 3 android:title="菜单选项1" 4 android:icon="@drawable/ic_launcher" 5 />
设置菜单选项的可选,android:checkableBehavior,chencked
1 <!-- checkableBehavior设置可选 --> 2 <group android:id="@+id/group1" 3 android:checkableBehavior="all" > 4 <!-- checked设置特定菜单项(被勾中) --> 5 <item 6 android:id="@+id/item1" 7 android:title="菜单选项1" 8 > 9 </item> 10 <item 11 android:id="@+id/item2" 12 android:checked="true" 13 android:title="菜单选项2"> 14 </item> 15 </group>
设置菜单可用不可用android:enable
1 <group android:id="@+id/group1"> 2 <item 3 android:id="@+id/item1" 4 android:title="菜单选项1" 5 android:enabled="true" 6 > 7 </item> 8 <item 9 android:id="@+id/item2" 10 android:title="菜单选项2" 11 android:enabled="false"> 12 </item> 13 </group>
设置菜单选项是否可见android:visible
1 <group android:id="@+id/group1"> 2 <item 3 android:id="@+id/item1" 4 android:title="菜单选项1" 5 android:visible="true" 6 > 7 </item> 8 <item 9 android:id="@+id/item2" 10 android:title="菜单选项2" 11 android:visible="false"> 12 </item> 13 </group> 14
详解请见:http://www.cnblogs.com/codingmyworld/archive/2011/08/21/2147829.html