Android菜单简述

android提供了三种菜单类型,分别为options menucontext menusub menuoptions menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能种不能嵌套子菜单。

options menu最多只能在屏幕最下面显示6个菜单选项,成为icon menuicon menu不能有checkable选项。多余6的会以more icon menu来调出,成为expanded menuoptions menu通过activityonCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 处理选中的菜单项。

context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menucontext menu在显示前都会调用onCreateContextMenu来生成menuonContextItemSelected选中的菜单项。

android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckablesetGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。

1、利用xml定义选项菜单

a) options menu通过activityonCreateOptionsMenu来生成

b) 这个函数只会在menu第一次生成时调用。

i. 任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。

c) onOptionsItemSelected 用来处理选中的菜单项。

1、 响应菜单项单击事件

3种方式

onMenuItemSelected(int featureId, MenuItem item) 

public boolean onOptionsItemSelected (MenuItem item) 

onMenuItemClick

2、 动态添加、修改和删除菜单项

菜单项的增删改查

增:add, addSubMenu

删:removeItemremoveGroup

改:

l 选项菜单:onPrepareOptionsMenu()——MenuItem->setXXX()

l 上下文菜单:onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {} 方法在每次调用上下文菜单时都会被调用一次

boolean cn.class3g.activity.MenuTestActivity.onPrepareOptionsMenu(Menu menu)

public boolean onPrepareOptionsMenu (Menu menu) 

Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents. 

The default implementation updates the system menu items based on the activity's state. Deriving classes should always call through to the base class implementation.

Parameters

menu

The options menu as last shown or first initialized by onCreateOptionsMenu().

Returns

· You must return true for the menu to be displayed; if you return false it will not be shown.

See Also

onCreateOptionsMenu(Menu) 

private int i = 0;

public boolean onPrepareOptionsMenu(Menu menu) {

i++;

MenuItem mi = menu.getItem(0);

mi.setTitle(mi.getTitle() +""+ i);

return super.onPrepareOptionsMenu(menu);

}

3、 子菜单的创建

l Xml创建

l 动态创建

Menu submenu = Menu.addSubMenu(x, x, x, x)

submenu.add()

submenu.add()

main_menu.addSubMenu(x,x,x,x);

或:

getMenuInflater ().inflater(R.menu.submenu, submenu);

4、 带单选或复选的子菜单

public boolean onCreateOptionsMenu(Menu menu) {

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

SubMenu sb = menu.findItem(R.id.item3).getSubMenu();

sb.setIcon(R.drawable.ic_launcher);

// sb.setGroupCheckable(0, true, true);

sb.getItem(0).setCheckable(true);

sb.getItem(0).setChecked(true);

this.menu = menu;

return super.onCreateOptionsMenu(menu);

}

5、 上下文子菜单

public class ContextMenuActivity extends Activity {

ContextMenu menu = null;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextView tv = (TextView) this.findViewById(R.id.textView);

this.registerForContextMenu(tv);

}

public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){

menu.setHeaderTitle("上下文菜单");

menu.setHeaderIcon(R.drawable.ic_launcher);

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

this.menu = menu;

}

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.subitem1:

Toast.makeText(this, "subitem1", 

Toast.LENGTH_SHORT).show();

break;

case R.id.subitem2:

Toast.makeText(this, "subitem2", 

Toast.LENGTH_SHORT).show();

break;

case R.id.subitem3:

Toast.makeText(this, "subitem3", 

Toast.LENGTH_SHORT).show();

break;

}

return true;

}

}

1.选项菜单

选项菜单上的多个指令(指令,即功能指令,译者注)是全局适用的,且可并行作用于当前进程 (原文为Activity,类似PC上的进程,下同.译者注),也可启动另一个进程.却不适用(文本)内容里的被选中中项.
(程序员就容易理解这段,大意是选项菜单可针对运行中的程序启动某些功能)

在大部分的手机上,用户按下”MENU”键就会在屏幕下方显示选项菜单.而用户再次按下”MENU”键或返回键就会关闭选项菜单.实际上,想要关闭任何菜单都可统一使用返回.(重复按下”MENU”键或者点击屏幕空白处也能实现同样效果.) 并需要注意在不同手机上的操作方法.

每个进程有属于它们的操作方式和选项菜单.一个程序的多个进程会有不同的选项菜单.

比如,在 Email程序的邮件列表里面,选项菜单有邮件搜索,邮件排序,刷新列表,和更改邮箱设置等的功能.Email程序的撰写模式下,选项菜单也有差异之处,例如多出了复制副本,添加附件和删除邮件这几个功能.

为了处理数目众多的菜单项,选项菜单通常以两步来逐级呈现.
• 图标选项菜单 初次按下MENU,屏幕底部会显示几个带图标且不可滚动的网格.(G1手机上会显示6个典型按钮.)
• 扩展选项菜单 如果这个进程的菜单项很多(超过6),选项菜单的最后一个图标会标记更多”–选中后会弹出一个包含多个菜单项目的列表,此列表有时还可以滚动.

2.关联菜单 

关联菜单类似于桌面操作系统(Win7,译者注)的右键菜单.这便于在任何地方都能启动一些指令.

如下图所示,用户可以长按屏幕上的内容来打开关联菜单 (若有的话).关联菜单其实是被选中内容的一些可操作指令的列表.指令也可以成为当前进程的一部分,系统也能通过被选中内容去启动另一个进程进行操作.

例如,在邮件列表中,用户长按邮件信息会弹出一个含有阅读,归档,删除等指令的关联菜单 .

用户亦可长按屏幕某些位置来打开关联菜单.比如当用户准确地在主屏幕界面(Home screen)空白处长按,同样会显示一个关联菜单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值