1.重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单。
2.如果希望应用程序能响应菜单项的单击事件,重写Activity中的onOptionsItemSelected(MenuItem item)方法即可。
MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //Options菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { //通过Activity得到填充Menu的填充器 getMenuInflater().inflate(R.menu.main, menu); /**给Option添加item * 参数1:分组的ID * 参数2:该item的ID * 参数3:添加顺序,从0开始 * 参数4:item显示的文本*/ menu.add(Menu.NONE, 1, 0, "0"); menu.add(Menu.NONE, 2, 2, "2"); menu.add(Menu.NONE, 4, 5, "5"); SubMenu subMenu = menu.addSubMenu("我还能点"); subMenu.add(Menu.NONE, 3, 6, "我是一个子选项"); //返回true显示菜单,返回false隐藏菜单 return true; } //给Option添加事件监听 @Override public boolean onOptionsItemSelected(MenuItem item) {//按下menu键触发该方法 switch (item.getItemId()) { case R.id.d: Toast.makeText(this, "d", 0).show(); break; case R.id.dmxy: Toast.makeText(this, "dmxy", 0).show(); break; case R.id.dom: Toast.makeText(this, "dom", 0).show(); break; case 2: Toast.makeText(this, "2", 0).show(); break; default: break; } return super.onOptionsItemSelected(item); } }
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.menudemo.MainActivity" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> <item android:id="@+id/dmxy" android:title="德玛西亚1"/> <item android:id="@+id/dom" android:title="德玛西亚2"/> <item android:id="@+id/d" android:title="0xml" android:orderInCategory="0"/> </menu>根节点必须为menu才能够正确的解析。上述可以看出来,order是指添加完事,放在哪个位置的一个排序:不写默认是第一个(两个都不写按照XML先后顺序),XML和Java代码中顺序相同则先加载XML的。其余的按照升序排序。
效果图:
1.重写Activity的onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)方法
2.调用Activity的registerForContextMenu(View view)方法给view组件注册上下文菜单。
3.如果系统事件能为菜单项提供响应,可以重写onContextItemSelected(MenuItem item)方法,或为指定菜单项绑定事件监听器。
MainActivity.java
public class MainActivity extends Activity { private Button b; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button) findViewById(R.id.btn); registerForContextMenu(b); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(Menu.NONE, 1, 1, "红色"); menu.add(Menu.NONE, 2, 2, "蓝色"); menu.add(Menu.NONE, 3, 3, "绿色"); menu.add(Menu.NONE, 4, 4, "紫色"); //给这四个菜单项设置为单选的 menu.setGroupCheckable(0, true, true); //设置上下文的标题和图标 menu.setHeaderIcon(R.drawable.ic_launcher); menu.setHeaderTitle("选择背景色"); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub return super.onContextItemSelected(item); } }上下文菜单需要长按才能够触发。
效果图:
1.调用new PopupMenu(Context context, View anchor)创建下拉菜单,android代表要激活该组件弹出菜单的组件。
2.调用PopupMenu的inflate()方法显示弹出式菜单
3.调用PopupMenu的show()方法显示弹出式菜单
MainActivity.java
public class MainActivity extends Activity { private Button b; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button) findViewById(R.id.btn); } public void btn(View view) { // 创建PopupMenu对象 PopupMenu menu = new PopupMenu(this, b); // 将菜单的XML资源文件加载到popup菜单中 getMenuInflater().inflate(R.menu.popup_menu, menu.getMenu()); // 添加事件监听 menu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.add: Toast.makeText(MainActivity.this, "添加", 0).show(); break; case R.id.del: Toast.makeText(MainActivity.this, "删除", 0).show(); break; } return false; } }); menu.show(); } }popup_menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/add" android:title="添加"/> <item android:id="@+id/del" android:title="删除"/> <item android:id="@+id/update" android:title="修改"/> <item android:id="@+id/sele" android:title="查询"/> </menu>
弹出式菜单单击即可。
总结:
1.选项菜单order是由数值来决定的,越小越靠前,不给定数值在最前面。手机按键menu和右上角都可以打开选项菜单
2.上下文菜单需要长按才能够触发
3.弹出式菜单需要单击即可触发
前两者都在Activity中重写方法实现的,后者是需要Context参数即可实现。