使用上下文菜单

   

上下文菜单与当前获得焦点的view关联,并通过按下轨迹球、D-pad的中键,或常按View3秒来触发。

 

定义和填入上下文菜单和Activity菜单类似。为特定的View创建上下文菜单有两种方式。

 

创建上下文菜单

 

第一种方式是为View类创建通用的上下文菜单,通过重写View的onCreateContextMenu处理函数,如下:

 

@Override

public void onCreateContextMenu(ContextMenu menu) {

super.onCreateContextMenu(menu);

menu.add(“ContextMenuItem1”);

}

 

这种方式创建的上下文菜单会在任何包含View类的Activity中获得。

 

更加变通的方式是创建Activity指定的上下文菜单,通过重写onCreateContextMenu方法并注册需要上下文菜单的View。注册View使用registerForContextMenu方法,传入View,如下代码所示:

 

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

EditText view = new EditText(this);

setContentView(view);

registerForContextMenu(view);

}

 

一旦View被注册,任何上下文菜单该显示的时候,onCreateContextMenu处理函数都会被触发。

 

重写onCreateContextMenu方法,并检查哪个View触发菜单创建,并填入合适的菜单项,如下面的代码片段所示:

 

@Override

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

super.onCreateContextMenu(menu, v, menuInfo);

menu.setHeaderTitle(“Context Menu”);

menu.add(0, menu.FIRST, Menu.NONE, “Item 1”).setIcon(R.drawable.menu_item);

menu.add(0, menu.FIRST+1, Menu.NONE, “Item 2”).setCheckable(true);

menu.add(0, menu.FIRST+2, Menu.NONE, “Item 3”).setShortcut(‘3’, ‘3’);

SubMenu sub = menu.addSubMenu(“Submenu”);

sub.add(“Submenu Item”);

}

 

如上所示,ContextMenu类支持和Menu类相同的add方法,所以,你可以用和ActivityMenu相同的方法填入上下文菜单项——包括子菜单,但它们俩都不支持图标。你也可以指定上下文菜单头条的文本和图标。

 

Android支持使用Intent Filter运行时填入上下文菜单。这个机制允许你指定当前的View呈现的数据类型和询问其它Android应用程序是否支持一些行为来填入上下文菜单。这个行为最普通的例子是EditText控件上的剪切、拷贝、粘贴菜单项。这些内容将在下一章详细描述。

 

处理上下文菜单选择

 

上下文菜单项选择的处理和Activity的菜单相似。你可以附加一个Intent或者菜单项Click Listener到每个菜单项上,或者通过重写Activity中的onContextItemSelected这个首选技巧。

 

Activity里,什么时候上下文菜单项被选择,这个事件处理函数就被触发。一个框架实现如下所示:

 

@Override

public boolean onContextItemSelected(MenuItem item) {

super.onContextItemSelected(item);

[ ... Handle menu item selection ... ]

return false;

}

 

 

posted on 2009-07-28 14:34  xirihanlin  阅读(5475)  评论(0编辑  收藏  举报