一、SubMenu子菜单
和功能菜单相似,但是可以添加子菜单。
二、实现步骤:
1、通过onCreateOptionsMenu方法创建子菜单,可以通过代码动态创建,也可以通过xml进行创建。
2、通过onOptionsItemSelected方法实现点击子菜单的事件。
三、参考代码:
1、通过代码动态创建子菜单:
main.java
package com.example.zhengcheng.submenudemo; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { //通过代码动态创建子菜单 SubMenu menu_file = menu.addSubMenu("文件"); //创建文件菜单 SubMenu menu_edit = menu.addSubMenu("编辑"); //创建编辑菜单 //为文件菜单创建子菜单 menu_file.add(1, 101, 1, "新建"); menu_file.add(1, 102, 1, "打开"); menu_file.add(1, 103, 1, "保存"); menu_file.setHeaderTitle("文件操作"); //设置菜单标题 menu_file.setHeaderIcon(R.mipmap.ic_launcher); //设置菜单图标 //为编辑菜单创建子菜单 menu_edit.add(2, 101, 1, "复制"); menu_edit.add(2, 102, 1, "粘贴"); menu_edit.add(2, 103, 1, "剪切"); menu_edit.setHeaderTitle("编辑操作"); //设置菜单标题 menu_edit.setHeaderIcon(R.mipmap.ic_launcher); //设置菜单图标 return true; } /** * 点击子菜单按钮后触发的操作 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getGroupId()) { case 1: //点击了第一组子菜单,对应第一组子菜单下的按钮 switch (item.getItemId()) { case 101: Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show(); break; case 102: Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show(); break; case 103: Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show(); break; } break; case 2: //点击了第二组子菜单,对应第二组子菜单下的按钮 switch (item.getItemId()) { case 101: Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show(); break; case 102: Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show(); break; case 103: Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show(); break; } break; } return super.onOptionsItemSelected(item); } }
2、通过xml创建子菜单
生成子菜单文件
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:title="文件" app:showAsAction="never"> <menu> <item android:id="@+id/menu_new" android:title="新建"/> <item android:id="@+id/menu_open" android:title="打开" /> <item android:id="@+id/menu_save" android:title="保存" /> <item android:id="@+id/menu_exit" android:title="退出" /> </menu> </item> <item android:title="编辑" app:showAsAction="never"> <menu> <item android:id="@+id/menu_copy" android:title="复制" /> <item android:id="@+id/menu_paste" android:title="粘贴" /> <item android:id="@+id/menu_cut" android:title="剪切" /> </menu> </item> </menu>
main.java:后台代码文件
package com.example.zhengcheng.submenudemo; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { //导入xml菜单内容 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); return true; } /** * 点击子菜单按钮后触发的操作 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_new: Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show(); break; case R.id.menu_open: Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show(); break; case R.id.menu_save: Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show(); break; case R.id.menu_exit: Toast.makeText(this, "点击了退出", Toast.LENGTH_SHORT).show(); finish(); break; case R.id.menu_copy: Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show(); break; case R.id.menu_paste: Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show(); break; case R.id.menu_cut: Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); } }