第一种方式,使用Java方式
第二种方式,使用menu.xml
package liudeli.activity; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class MenuActivity extends Activity { private static final int MENU_ITEM_CREATE = 0; private static final int MENU_ITEM_DELETE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * 第一步:菜单选项 * 创建菜单 * @param menu * @return */ @Override public boolean onCreateOptionsMenu(Menu menu) { /************************* 第一种方式,使用Java方式 ****************************/ /** * 参数一: 组号 * 参数二: 唯一的ID号 * 参数三: 排序号 * 参数四: 标题 */ MenuItem menu_item_create = menu.add(0, MENU_ITEM_CREATE, 0, "新建"); // 设置是否可点 menu_item_create.setEnabled(true); // 设置图标,菜单有时候加载不出来,但是不会报错 menu_item_create.setIcon(android.R.drawable.ic_menu_camera); /** * 参数一: 组号 * 参数二: 唯一的ID号 * 参数三: 排序号 * 参数四: 标题 */ menu.add(0, MENU_ITEM_DELETE, 0, "删除"); /** * 添加子菜单 */ SubMenu subMenu = menu.addSubMenu("子菜单"); subMenu.add(0, 11, 0, "子菜单1"); subMenu.add(0, 12, 0, "子菜单2"); /************************* 第二种方式,使用menu.xml ****************************/ // 菜单加载器 MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu, menu); /************************* menu说明 ****************************/ /*menu.add("菜单一"); // 添加菜单 menu.add(1, Menu.FIRST, Menu.FIRST, "菜单二"); // 添加菜单 带组号... int group1 = 1; int group2 = 2; menu.add(group1, 1, 1, "item1");// 添加菜单 带组号... menu.add(group1, 2, 2, "item2");// 添加菜单 带组号... menu.add(group2, 3, 3, "item3");// 添加菜单 带组号... menu.add(group2, 4, 4, "item4");// 添加菜单 带组号... menu.removeGroup(group1); //删除一个组 menu.setGroupVisible(group1, false); //设置可见性 menu.setGroupEnabled(group2, false); //设置是否可点 menu.setGroupCheckable(group2, true, t); //设置一组菜单的勾选情况*/ return super.onCreateOptionsMenu(menu); } /** * 第二步:菜单的响应 * 处理menu的点击事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); /** * 对应 第一种方式,使用Java方式 */ switch (id) { case MENU_ITEM_CREATE: Toast.makeText(this, item.getTitle() + " , 创建", Toast.LENGTH_LONG).show(); break; case MENU_ITEM_DELETE: Toast.makeText(this, item.getTitle() + " , 删除", Toast.LENGTH_LONG).show(); break; case 11: // 上面代码 itemid定义是11 Toast.makeText(this, item.getTitle() + " , 第一个子菜单", Toast.LENGTH_LONG).show(); break; case 12: // 上面代码 itemid定义是12 Toast.makeText(this, item.getTitle() + " , 第二个子菜单", Toast.LENGTH_LONG).show(); break; default: break; } // item.getTitle() 获取上面代码设置的标题 item.getItemId() 获取上面代码设置的ItemId // Toast.makeText(this, item.getTitle() + " , " + item.getItemId(), Toast.LENGTH_LONG).show(); /** * 对应 第二种方式,使用menu.xml */ switch (id) { case R.id.menu_create: Toast.makeText(this, item.getTitle() + " , menu.xml创建", Toast.LENGTH_LONG).show(); break; case R.id.menu_delete: Toast.makeText(this, item.getTitle() + " , menu.xml删除", Toast.LENGTH_LONG).show(); break; case R.id.menu_sub1: Toast.makeText(this, item.getTitle() + " , menu.xml子菜单一", Toast.LENGTH_LONG).show(); break; case R.id.menu_sub2: Toast.makeText(this, item.getTitle() + " , menu.xml子菜单二", Toast.LENGTH_LONG).show(); break; } // item.getTitle() 获取上面代码设置的标题 item.getItemId() 获取上面代码设置的ItemId // Toast.makeText(this, item.getTitle() + " , " + item.getItemId(), Toast.LENGTH_LONG).show(); return super.onOptionsItemSelected(item); } }
menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_create" android:icon="@android:drawable/ic_menu_add" android:title="X新建"> </item> <item android:id="@+id/menu_delete" android:icon="@android:drawable/ic_menu_add" android:title="X删除"> </item> <item android:title="X子菜单"> <menu> <item android:id="@+id/menu_sub1" android:icon="@android:drawable/ic_menu_add" android:title="X子菜单1"> </item> <item android:id="@+id/menu_sub2" android:icon="@android:drawable/ic_menu_add" android:title="X子菜单2"> </item> </menu> </item> </menu>
效果图: