android menu枚举,android Menu

android中的菜单

菜单是一种常见的应用程序与用户交互的方式,他使用类似列表的形式显示用户可以操作的功能

,而用户则可以通过菜单来选择要执行的操作,应用程序也可以对用户的选择进行相关的响应。

选项菜单

选项菜单(OptionsMenu)是通过点击设备上Menu建弹出的菜单;

子菜单(SubMenu)是选择某个菜单项后,再次弹出的下级菜单。

上下文菜单(ContextMenu)是通过长按(通常是2秒)某个控件后显示的菜单;

使用资源文件创建选项菜单

选项菜单 通过res\menu下的XML文件可以配置选项菜单。

xmls:tools="http://schemas.android.com/tools"

tools:context="cn.edu.menu.MainActivity">

android:id="@+id/action_setings"

android:orderInCategory="100"

android:showAsAction="never"

android:title="@string/action_settings"/>

在Activity中的onCreateOptionsMenu()方法将用于实现选项菜单的加载,通常使用开发工具创建Activity

时,对应的部分代码已自动生成:

public boolean onCreateOptionMenu(Menu menu){

getMenuInflater().inflate(R.menu.main,menu);

return true;

}

在Activity中的onOptionsItemSelected()方法将用于选项菜单中菜单项的响应,通常使用开发工具创建Activity时

,对应的代码已经自动生成:

public boolean onOptionsItemSelected(Menuitem item){

int id = item.getItemId();

if(id==R.id.action_settings){

return true;

}

return super.onOptionsItemSelected(item);

}

通常在配置选项菜单时,需要为每个菜单项配置如下属性:

id:菜单项的ID标识,用于响应菜单项时,判断当前点击的哪个菜单项;

orderInCategory:序号,即存在多个菜单项时的排序,取值为整数,数值越小,则越靠前显示,数值越大

,则越靠后显示;

showAsAction:将菜单项显示在ActionBar上,取值为枚举型,包括never、always、ifRooms、withText、collapseActionView;

title:菜单项上显示的文字。

实例:

xmls:tools="http://schemas.android.com/tools"

tools:context="cn.edu.menu.MainActivity">

android:id="@+id/action_file"

android:orderInCategory="101"//菜单项的排列顺序

android:showAsAction="never"

android:title="file"/>

android:id="@+id/action_refactor"

android:orderInCategory="103"

android:showAsAction="never"

android:title="Refactor"/>

android:id="@+id/action_edit"

android:orderInCategory="102"

android:showAsAction="never"

android:title="Edit"/>

Activity:

public boolean onOptionsItemSelected(Menuitem item){

int id = item.getItemId();

switch(id){

case R.id.action_file:

Toast.makeText(this,"您选择了File",Toast。LENGTH_SHORT).show();

break;

case R.id.action_edit:

Toast.makeText(this,"您选择了Edit",Toast。LENGTH_SHORT).show();

break;

case R.id.action_refactor:

Toast.makeText(this,"您选择了Refactor",Toast。LENGTH_SHORT).show();

break;

}

return super.onOptionsItemSelected(item);

}

实用程序代码创建选项菜单

Menu类中定义的创建菜单项的方法:

public MenuItem add(int groupId,int itemId,int order,CharSequence title)

public MenuItem add(int groupId,int itemId,int order,int titleRes)

private static final int MENU_FILE_ID = 9527;

private static final int MENU_EDIT_ID = 1111;

private static final int MENU_REFACTOR_ID = 2222;

private static final int MENU_WINDOW_ID = 3333;

private static final int MENU_HELP_ID = 4444;

public boolean onCreateOptionsMenu(Menu menu){

menu.add(Menu.NONE,MENU_FILE_ID,1,"File");

menu.add(Menu.NONE,MENU_HELP_ID,5,"Help");

menu.add(Menu.NONE,MENU_WINDOW_ID,4,"Window");

menu.add(Menu.NONE,MENU_REFACTOR_ID,3,"Refactor");

menu.add(Menu.NONE,MENU_EDIT_ID,2,"Edit");

return true;

}

public boolean onOptionsItemSelected(Menuitem item){

int id = item.getItemId();

switch(id){

case MENU_FILE_ID:

Toast.makeText(this,"您选择了File",Toast。LENGTH_SHORT).show();

break;

case MENU_EDIT_ID:

Toast.makeText(this,"您选择了Edit",Toast。LENGTH_SHORT).show();

break;

case MENU_REFACTOR_ID:

Toast.makeText(this,"您选择了Refactor",Toast。LENGTH_SHORT).show();

break;

case MENU_WINDOW_ID:

Toast.makeText(this,"您选择了Window",Toast。LENGTH_SHORT).show();

break;

case MENU_HELP_ID:

Toast.makeText(this,"您选择了Help",Toast。LENGTH_SHORT).show();

break;

}

return super.onOptionsItemSelected(item);

}

为选项菜单添加子菜单

选项菜单的子菜单(SubMenu)亦可通过配置文件或程序代码创建:

通过配置文件创建子菜单:为原有的上级菜单项的节点添加

并在

通过程序代码创建子菜单:调用Menu对象的addSubMenu()创建一般菜单项,通过

返回值SubMenu对象创建子菜单。

private static final int MENU_FILE_ID = 9527;

private static final int MENU_EDIT_ID = 1111;

private static final int MENU_REFACTOR_ID = 2222;

private static final int MENU_WINDOW_ID = 3333;

private static final int MENU_HELP_ID = 4444;

private static final int MENU_SOURCE_ID = 8888;

public boolean onCreateOptionsMenu(Menu menu){

menu.add(Menu.NONE,MENU_FILE_ID,1,"File");

menu.add(Menu.NONE,MENU_HELP_ID,5,"Help");

menu.add(Menu.NONE,MENU_WINDOW_ID,4,"Window");

menu.add(Menu.NONE,MENU_REFACTOR_ID,3,"Refactor");

menu.add(Menu.NONE,MENU_EDIT_ID,2,"Edit");

SubMenu subMenu = menu.addSubMenu(Menu.NONE,MENU_SOURCE_ID,4,"source");

subMenu.add(Menu.NONE,0,1,"Format");

subMenu.add(Menu.NONE,1,2,"Clean Up");

return true;

}

通过配置文件设置:

public boolean onCreateOptionMenu(Menu menu){

getMenuInflater().inflate(R.menu.main,menu);

return true;

}

xmls:tools="http://schemas.android.com/tools"

tools:context="cn.edu.menu.MainActivity">

android:id="@+id/action_file"

android:orderInCategory="101"//菜单项的排列顺序

android:showAsAction="never"

android:title="file">

android:id="@+id/action_file_open"

android:orderInCategory="1022"

android:showAsAction="never"

android:title="Open"/>

android:id="@+id/action_file_save"

android:orderInCategory="1012"

android:showAsAction="never"

android:title="Save"/>

android:id="@+id/action_refactor"

android:orderInCategory="103"

android:showAsAction="never"

android:title="Refactor"/>

android:id="@+id/action_edit"

android:orderInCategory="102"

android:showAsAction="never"

android:title="Edit"/>

创建上下文菜单

通过重写Activity的onCreateContextMenu()方法可以初始化上下文菜单,菜单项的创建方式

与在选项菜单中创建菜单项相同;

需要调用registerForContextMenu(View view)方法将上下文菜单注册到某个控件之上;

通过重写Activity的onContextMenuSelected()方法可以相应上下文菜单中的选中事件。

private ImageView imageview;

registerForContextMenu(imageview);

private static final int MENU_CHANGE_ID = 9521;

private static final int MENU_SAVE_ID =9522;

public void onCreateContextMenu(ContextMenu menu,View v,

ContextMenuInfo menuInfo){

menu.add(Menu.NONE,MENU_CHANGE_ID,1,"Change");

menu.add(Menu.NONE,MENU_SAVE_ID,2,"Save");

super.onCreateContextMenu(menu,v,menuInfo);

}

public boolean onContextItemSelected(MenuItem item){

switch(item.getItemId()){

case MENU_CHANGE_ID:

break;

case MENU_SAVE_ID:

break;

}

return super.onContextItemSelected(item);

} 在ListView中创建上下文菜单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值