Android UI学习 - Menu
2012-04-11 20:07
369 查看
Android 菜单(SubMenu)
SubMenu(子菜单),是在选项菜单的基础上增加子菜单。
一个Menu对象可以拥有0或多个SubMenu,通过调用Menu.addSubMenu方法将SubMenu添加到当前Menu中。在SubMenu 添加MenuItem的方式和在Menu中添加MenuItem方式一样,因为SubMenu是Menu的子类,但是SubMenu里不能再添加 SubMenu。
Android提供了基于Group id管理多个MenuItem的方法。
removeGroup(int group):移除所有属于group的MenuItem。
setGroupEnable( int group ,boolean enable):批量开启或关闭整个组的MenuItem。
setGroupVisible( int group ,visible):批量显示或隐藏整个组的MenuItem。
setGroupCheckable( int group ,boolean checkable,boolean exclusive):设置菜单是否可选中。最后一个exclusive是指是单选还是多选,当exclusive是true时,系统将菜单前面添加单选 框,是false时则变成是checkbox多选框。
示例:(在选项菜单[帮助]上配置了三个子菜单[LiveHelp,Email,Phone])
效果图
Activity代码
Java代码
//定义选项菜单
final private static int OPTION_MENU_HELP = 3;//菜单[帮助]的编号
final private static int OPTION_MENUS_GROUP0 = 0;//菜单组0#
final private static int OPTION_MENUS_GROUP1 = 1;//菜单组1#
final private static int OPTION_MENUS_GROUP2 = 2;//菜单组2#
private MenuEntity[] optionMenus = {
new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),
new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),
new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),
new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),
new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),
new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),
};
//定义选项菜单[帮助]的子菜单
private MenuEntity[] helpSubMenus = {
new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list_view);
}
/**
* 读取选中点击的菜单
* @param index
* @return
*/
public String readOptionsMenu(int index){
for(int i=0;i<optionMenus.length;i++){
if(optionMenus[i].getItemId()==index) return optionMenus[i].getTitle().toString();
}
for(int i=0;i<helpSubMenus.length;i++){
if(helpSubMenus[i].getItemId()==index) return helpSubMenus[i].getTitle().toString();
}
return "";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
Toast.makeText(context, "menu["+itemId+":"+item.getTitle()+"]被点击了", Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
@Override
public void onOptionsMenuClosed(Menu menu) {
Toast.makeText(context, "OptionsMenu被关闭了", Toast.LENGTH_SHORT).show();
super.onOptionsMenuClosed(menu);
}
备注
Java代码
private MenuEntity[] optionMenus = {
new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),
new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),
new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),
new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),
new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),
new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),
};
//定义选项菜单[帮助]的子菜单
private MenuEntity[] helpSubMenus = {
new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),
};
其中的
Java代码
MenuEntity
参考 关于菜单基础属性的实体类
附录一 : 调用方法 removeGroup(int group)
Java代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
menu.removeGroup(OPTION_MENUS_GROUP1);//移除全部group为1的菜单
return super.onCreateOptionsMenu(menu);
}
如图所示:原group为1的菜单不显示了!
附录二 : 调用方法 setGroupEnabled( int group, boolean enabled )
关闭或者开启组为group的全部菜单。(关闭:enabled =false,菜单项变灰,不能点;开启:enabled =false,菜单项正常,可以点)
Java代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
menu.setGroupEnabled(OPTION_MENUS_GROUP1, false);//关闭group为1的菜单
return super.onCreateOptionsMenu(menu);
}
group为1的菜单项变灰了
2011-06-15 0:51
SubMenu(子菜单),是在选项菜单的基础上增加子菜单。
一个Menu对象可以拥有0或多个SubMenu,通过调用Menu.addSubMenu方法将SubMenu添加到当前Menu中。在SubMenu 添加MenuItem的方式和在Menu中添加MenuItem方式一样,因为SubMenu是Menu的子类,但是SubMenu里不能再添加 SubMenu。
Android提供了基于Group id管理多个MenuItem的方法。
removeGroup(int group):移除所有属于group的MenuItem。
setGroupEnable( int group ,boolean enable):批量开启或关闭整个组的MenuItem。
setGroupVisible( int group ,visible):批量显示或隐藏整个组的MenuItem。
setGroupCheckable( int group ,boolean checkable,boolean exclusive):设置菜单是否可选中。最后一个exclusive是指是单选还是多选,当exclusive是true时,系统将菜单前面添加单选 框,是false时则变成是checkbox多选框。
示例:(在选项菜单[帮助]上配置了三个子菜单[LiveHelp,Email,Phone])
Activity代码
Java代码
//定义选项菜单
final private static int OPTION_MENU_HELP = 3;//菜单[帮助]的编号
final private static int OPTION_MENUS_GROUP0 = 0;//菜单组0#
final private static int OPTION_MENUS_GROUP1 = 1;//菜单组1#
final private static int OPTION_MENUS_GROUP2 = 2;//菜单组2#
private MenuEntity[] optionMenus = {
new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),
new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),
new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),
new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),
new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),
new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),
};
//定义选项菜单[帮助]的子菜单
private MenuEntity[] helpSubMenus = {
new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_list_view);
}
/**
* 读取选中点击的菜单
* @param index
* @return
*/
public String readOptionsMenu(int index){
for(int i=0;i<optionMenus.length;i++){
if(optionMenus[i].getItemId()==index) return optionMenus[i].getTitle().toString();
}
for(int i=0;i<helpSubMenus.length;i++){
if(helpSubMenus[i].getItemId()==index) return helpSubMenus[i].getTitle().toString();
}
return "";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
Toast.makeText(context, "menu["+itemId+":"+item.getTitle()+"]被点击了", Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
@Override
public void onOptionsMenuClosed(Menu menu) {
Toast.makeText(context, "OptionsMenu被关闭了", Toast.LENGTH_SHORT).show();
super.onOptionsMenuClosed(menu);
}
备注
Java代码
private MenuEntity[] optionMenus = {
new MenuEntity(OPTION_MENUS_GROUP0, 1, 1, "删除",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP0, 2, 2, "保存",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP0, 3, 3, "帮助",android.R.drawable.ic_menu_help),
new MenuEntity(OPTION_MENUS_GROUP0, 4, 4, "添加",android.R.drawable.ic_menu_add),
new MenuEntity(OPTION_MENUS_GROUP1, 5, 5, "详细",android.R.drawable.ic_menu_info_details),
new MenuEntity(OPTION_MENUS_GROUP1, 6, 6, "发送",android.R.drawable.ic_menu_send),
new MenuEntity(OPTION_MENUS_GROUP1, 7, 7, "电话",android.R.drawable.ic_menu_call),
new MenuEntity(OPTION_MENUS_GROUP1, 8, 8, "照相",android.R.drawable.ic_menu_camera),
};
//定义选项菜单[帮助]的子菜单
private MenuEntity[] helpSubMenus = {
new MenuEntity(OPTION_MENUS_GROUP2, 9, 1, "LiveHelp",android.R.drawable.ic_menu_delete),
new MenuEntity(OPTION_MENUS_GROUP2, 10, 2, "Email",android.R.drawable.ic_menu_edit),
new MenuEntity(OPTION_MENUS_GROUP2, 11, 2, "Phone",android.R.drawable.ic_menu_edit),
};
其中的
Java代码
MenuEntity
参考 关于菜单基础属性的实体类
附录一 : 调用方法 removeGroup(int group)
Java代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
menu.removeGroup(OPTION_MENUS_GROUP1);//移除全部group为1的菜单
return super.onCreateOptionsMenu(menu);
}
如图所示:原group为1的菜单不显示了!
附录二 : 调用方法 setGroupEnabled( int group, boolean enabled )
关闭或者开启组为group的全部菜单。(关闭:enabled =false,菜单项变灰,不能点;开启:enabled =false,菜单项正常,可以点)
Java代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {//创建选项菜单
for(MenuEntity menuEntity:optionMenus){
if(OPTION_MENU_HELP==menuEntity.getItemId()){
//菜单[帮助]增加子菜单
SubMenu subMenu = menu.addSubMenu(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
for(MenuEntity subMenuEntity:helpSubMenus){
subMenu.add(subMenuEntity.getGroupId(), subMenuEntity.getItemId(), subMenuEntity.getOrder(), subMenuEntity.getTitle()).setIcon(subMenuEntity.getIconRes());
}
}else{
menu.add(menuEntity.getGroupId(), menuEntity.getItemId(), menuEntity.getOrder(), menuEntity.getTitle()).setIcon(menuEntity.getIconRes());
}
}
menu.setGroupEnabled(OPTION_MENUS_GROUP1, false);//关闭group为1的菜单
return super.onCreateOptionsMenu(menu);
}
2011-06-15 0:51
package com.test.menu; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.*; public class testmenuActivity extends Activity { public static final int ITEM0 = Menu.FIRST; public static final int ITEM1 = Menu.FIRST+1; Button button1; Button button2; MenuItem item; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setVisibility(View.INVISIBLE); button2.setVisibility(View.INVISIBLE); } public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); menu.add(0, ITEM0, 0, "显示button1"); menu.add(0, ITEM1, 1, "显示button2"); menu.findItem(ITEM1); item = (MenuItem) menu.findItem(ITEM0); return true; } public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case ITEM0: actionClickMenuItem1(); bool = false; break; case ITEM1: actionClickMenuItem2(); bool = true; break; } return super.onOptionsItemSelected(item); } /* *点击第一个menu的第一个按钮执行的动作; */ private void actionClickMenuItem1(){ setTitle("button1 可见"); button1.setVisibility(View.INVISIBLE); button2.setVisibility(View.VISIBLE); item.setIcon(R.drawable.menu_start); } /* *点击第一个menu的第一个按钮执行的动作; */ private void actionClickMenuItem2(){ setTitle("button2 可见"); button2.setVisibility(View.INVISIBLE); button1.setVisibility(View.VISIBLE); item.setIcon(R.drawable.menu_end); } }
相关文章推荐
- Android学习:用户界面UI之菜单(Menu)
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android UI学习 - Menu
- Android学习(17)-子线程修改UI
- android ui 学习 之 时间和日期对话框
- Android UI学习 - ListView
- AndroidTraining学习------Building-a-Dynamic-UI-with-Fragments-
- Android开发学习之路--UI之ListView
- Android开发学习之路--UI之简单聊天界面
- Android UI学习 - FrameLayou和布局优化
- Android 利用【Hierarchy Viewer 】 工具学习别人的UI设计
- Android UI学习 - TableLayout