当点击每一个页面中的选项菜单时,会在页面中弹出一个悬浮窗口,这就是SubMenu子菜单,子菜单中有标题,例如:文件,还有下面的菜单项组成,并且该菜单项是和文件操作相关的。
动态添加子菜单:
package com.example.submenu;
import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
@SuppressLint("ShowToast")
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) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.main, menu);
//通过代码,动态添加子菜单
SubMenu file=menu.addSubMenu("文件");//返回值是一个SubMenu子菜单
SubMenu edit=menu.addSubMenu("编辑");
file.add(1, 1, 1, "新建");
file.add(1, 2, 1, "打开");
file.add(1, 3, 1, "保存");
file.setHeaderTitle("文件操作");
edit.add(2, 1, 1, "复制");
edit.add(2, 2, 1, "粘贴");
edit.add(2, 3, 1, "剪切");
edit.setHeaderTitle("编辑操作");
return true;
}
/*
* 重写onOptionsItemSelected()方法,用switch语句判断当前当前点击的是哪个GroupId
* 监听子菜单的点击事件
*/
@SuppressLint("ShowToast")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getGroupId()==1){
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "点击了新建", Toast.LENGTH_SHORT);
break;
case 2:
Toast.makeText(MainActivity.this, "点击了打开", Toast.LENGTH_SHORT);
break;
case 3:
Toast.makeText(MainActivity.this, "点击了保存", Toast.LENGTH_SHORT);
break;
}
}else if (item.getGroupId()==2) {
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT);
break;
case 2:
Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT);
break;
case 3:
Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT);
break;
}
}
return super.onOptionsItemSelected(item);
}
}
使用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="com.example.submenu.MainActivity" >
<item
android:id="@+id/file"
android:orderInCategory="100"
android:title="文件"
app:showAsAction="never">
<menu>
<item
android:id="@+id/new_file1"
android:showAsAction="never"
android:title="新建"/>
<item
android:id="@+id/new_file2"
android:showAsAction="never"
android:title="打开"/>
<item
android:id="@+id/new_file3"
android:showAsAction="never"
android:title="保存"/>
</menu>
</item>
<item
android:id="@+id/edit"
android:orderInCategory="100"
android:title="编辑"
app:showAsAction="never">
<menu>
<item
android:id="@+id/new_edit1"
android:showAsAction="never"
android:title="复制"/>
<item
android:id="@+id/new_edit2"
android:showAsAction="never"
android:title="剪切"/>
<item
android:id="@+id/new_edit3"
android:showAsAction="never"
android:title="重命名"/>
</menu>
</item>
</menu>
修改menu菜单之后的main.xml文件:
package com.example.submenu;
import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
@SuppressLint("ShowToast")
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) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.main, menu);
//通过代码,动态添加子菜单
/* SubMenu file=menu.addSubMenu("文件");//返回值是一个SubMenu子菜单
SubMenu edit=menu.addSubMenu("编辑");
file.add(1, 1, 1, "新建");
file.add(1, 2, 1, "打开");
file.add(1, 3, 1, "保存");
file.setHeaderTitle("文件操作");
edit.add(2, 1, 1, "复制");
edit.add(2, 2, 1, "粘贴");
edit.add(2, 3, 1, "剪切");
edit.setHeaderTitle("编辑操作");*/
//方法二:实现创建子菜单
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
/*
* 重写onOptionsItemSelected()方法,用switch语句判断当前当前点击的是哪个GroupId
* 监听子菜单的点击事件
*/
@SuppressLint("ShowToast")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.new_file1:
Toast.makeText(MainActivity.this, "点击了新建", Toast.LENGTH_SHORT);
break;
case R.id.new_file2:
Toast.makeText(MainActivity.this, "点击了打开", Toast.LENGTH_SHORT);
break;
case R.id.new_file3:
Toast.makeText(MainActivity.this, "点击了保存", Toast.LENGTH_SHORT);
break;
case R.id.new_edit1:
Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT);
break;
case R.id.new_edit2:
Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT);
break;
case R.id.new_edit3:
Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT);
break;
}
return super.onOptionsItemSelected(item);
}
}