两种菜单实现方式大同小异。
一、右上角二级菜单(submenu):
1、布局文件(menu文件夹下创建sub_menu.xml):
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/school" android:title="学校"> <menu> <item android:id="@+id/czdx" android:title="常州大学"></item> <item android:id="@+id/njdx" android:title="南京大学"></item> <item android:id="@+id/whdx" android:title="武汉大学"></item> </menu> </item> <item android:id="@+id/college" android:title="院系"> <menu> <item android:id="@+id/computer" android:title="计算机学院"></item> <item android:id="@+id/art" android:title="艺术学院"></item> <item android:id="@+id/english" android:title="英语学院"></item> </menu> </item> </menu>
2、业务实现:
@Override public boolean onCreateOptionsMenu(Menu menu) { //加载 布局实现 getMenuInflater().inflate(R.menu.sub_menu, menu); return super.onCreateOptionsMenu(menu); }
3、选择事件:
@Override public boolean onOptionsItemSelected(MenuItem item) { String str = null; switch(item.getItemId()){ case R.id.school: case R.id.college: str = "一级标签:" + item.getItemId() + "|" + item.toString(); break; case R.id.czdx: case R.id.njdx: case R.id.whdx: case R.id.english: case R.id.art: case R.id.computer: str = "二级标签:" + item.getItemId() + "|" + item.toString(); break; } Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); return super.onOptionsItemSelected(item); }
4、效果如下:
二、快捷菜单(ContextMenu):
简介:单击界面某元素超过2秒后,弹出一个快捷菜单。
1、布局文件(menu文件夹下创建context_menu.xml):
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/school" android:title="学校"> <menu> <item android:id="@+id/czdx" android:title="常州大学"></item> <item android:id="@+id/njdx" android:title="南京大学"></item> </menu> </item> <item android:id="@+id/college" android:title="院系"> <menu> <item android:id="@+id/computer" android:title="计算机学院"></item> <item android:id="@+id/art" android:title="艺术学院"></item> </menu> </item> </menu>
2、业务实现:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle("快捷菜单"); menu.add(0, 1, 0,"菜单1"); menu.add(0, 2, 1,"菜单2"); //加载 布局实现 getMenuInflater().inflate(R.menu.context_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); }
3、选择事件:
@Override public boolean onContextItemSelected(MenuItem item) { String str = null; switch(item.getItemId()){ case R.id.school: case R.id.college: str = "一级标签:" + item.getItemId() + "|" + item.toString(); break; case R.id.czdx: case R.id.njdx: case R.id.art: case R.id.computer: str = "二级标签:" + item.getItemId() + "|" + item.toString(); break; } Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); return super.onContextItemSelected(item); }
4、最后,将快捷菜单注册到界面中的某个控件上:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); Button button = (Button) findViewById(R.id.btn1); registerForContextMenu(button); }
5、效果如下,长按按钮,弹出快捷菜单: