您的位置:首页 > 产品设计 > UI/UE

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




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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: