子菜单,即点击菜单后出现一个菜单栏供选择
创建子菜单的步骤:
(1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2) 调用SubMenu的add()方法,添加子菜单项 (3) 覆盖onContextItemSelected()方法,响应子菜单的单击事件
示例:
(1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
1 //动态添加子菜单2 3 SubMenu file = menu.addSubMenu("文件");//子菜单的名字4 SubMenu edit = menu.addSubMenu("编辑");//子菜单的名字5
(2) 调用SubMenu的add()方法,添加子菜单项
1 //给子菜单添加菜单项 2 file.setHeaderTitle("文件操作");//菜单标题 3 file.setHeaderIcon(R.drawable.icon_72); //菜单图标 4 file.add(1, 100, 1, "打开"); 5 file.add(1, 101, 1, "关闭"); 6 file.add(1, 102, 1, "删除"); 7 8 edit.setHeaderTitle("编辑操作"); 9 edit.setHeaderIcon(R.drawable.icon_72);10 edit.add(2,100,1,"复制");11 edit.add(2,101,1,"粘贴");12 edit.add(2,102,1,"剪切");
// 添加OptionsMenu菜单项,即4,5,6,10,11,12行代码方法
/* menu.add(groupId, itemId, order, title) * groupId:菜单项所在的组 * itemId:菜单项编号 * order:排序 * title:标题 * setIcon()方法为菜单设置图标,
(3) 覆盖onContextItemSelected()方法,响应子菜单的单击事件
1 //添加响应事件 2 @Override 3 public boolean onOptionsItemSelected(MenuItem item) { 4 // TODO Auto-generated method stub 5 6 //先判断组id再判断item 的id 7 if(item.getGroupId()==1) 8 { 9 switch (item.getItemId()) {10 case 100:11 Toast.makeText(SubMenu_text.this, "点击了打开", 1).show();12 break;13 case 101:14 Toast.makeText(SubMenu_text.this, "点击了关闭", 1).show();15 break;16 case 102:17 Toast.makeText(SubMenu_text.this, "点击了删除", 1).show();18 break;19 20 default:21 break;22 }23 }24 else if(item.getGroupId()==2)25 {26 switch (item.getItemId()) {27 case 100:28 Toast.makeText(SubMenu_text.this, "点击了复制", 1).show();29 break;30 case 101:31 Toast.makeText(SubMenu_text.this, "点击了粘贴", 1).show();32 break;33 case 102:34 Toast.makeText(SubMenu_text.this, "点击了剪切", 1).show();35 break;36 37 default:38 break;39 }40 }41 return super.onOptionsItemSelected(item); 42 }
完整代码:
1 package information; 2 3 import com.example.allcode.R; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.view.Menu; 8 import android.view.MenuItem; 9 import android.view.SubMenu;10 import android.widget.Toast;11 12 public class SubMenu_text extends Activity{13 @Override14 protected void onCreate(Bundle savedInstanceState) {15 // TODO Auto-generated method stub16 super.onCreate(savedInstanceState);17 setContentView(R.layout.submenu);18 }19 20 @Override21 public boolean onCreateOptionsMenu(Menu menu) {22 // TODO Auto-generated method stub23 //动态添加子菜单24 25 SubMenu file = menu.addSubMenu("文件");//子菜单的名字26 SubMenu edit = menu.addSubMenu("编辑");//子菜单的名字27 28 //给子菜单添加菜单项29 file.setHeaderTitle("文件操作");//菜单标题30 file.setHeaderIcon(R.drawable.icon_72); //菜单图标31 file.add(1, 100, 1, "打开");32 file.add(1, 101, 1, "关闭");33 file.add(1, 102, 1, "删除");34 35 edit.setHeaderTitle("编辑操作"); 36 edit.setHeaderIcon(R.drawable.icon_72);37 edit.add(2,100,1,"复制");38 edit.add(2,101,1,"粘贴");39 edit.add(2,102,1,"剪切");40 41 return super.onCreateOptionsMenu(menu);42 43 }44 45 //添加响应事件46 @Override47 public boolean onOptionsItemSelected(MenuItem item) {48 // TODO Auto-generated method stub49 50 //先判断组id再判断item 的id51 if(item.getGroupId()==1)52 {53 switch (item.getItemId()) {54 case 100:55 Toast.makeText(SubMenu_text.this, "点击了打开", 1).show();56 break;57 case 101:58 Toast.makeText(SubMenu_text.this, "点击了关闭", 1).show();59 break;60 case 102:61 Toast.makeText(SubMenu_text.this, "点击了删除", 1).show();62 break;63 64 default:65 break;66 }67 }68 else if(item.getGroupId()==2)69 {70 switch (item.getItemId()) {71 case 100:72 Toast.makeText(SubMenu_text.this, "点击了复制", 1).show();73 break;74 case 101:75 Toast.makeText(SubMenu_text.this, "点击了粘贴", 1).show();76 break;77 case 102:78 Toast.makeText(SubMenu_text.this, "点击了剪切", 1).show();79 break;80 81 default:82 break;83 }84 }85 return super.onOptionsItemSelected(item); 86 }87 }
注意:为了实现界面的美化,需要给该activity一个样式
在AndroidManifest.xml文件下修改
<activity android:name="information.SubMenu_text"
android:theme="@android:style/Theme.Light.NoTitleBar"> </activity>
效果图: