Android ContextMenu即上下文菜单,类似于PC上的右键菜单,用于快捷操作. 当一个试图注册到ContextMenu时,在当前视图上长按(大概两秒钟) ,将会弹出一个相关功能的菜单。任何视图都可以注册ContextMenu.
PS:ContextMenu貌似不支持icon和快捷键,反正我不是不知道怎么搞出来。有知道的大侠麻烦告知一声。
Activity中注册ContextMenu
class TextActivity extends Activity
{
My View mView = null;
onCreate(Bundle bundle)
{
...
mView = (MyView)findViewById(R.id.viewid);
registerForContextMenu(mView); /*注册到ContextMenu*/
...
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
//添加相应的菜单项
menu.add(0,Menu.FIRST, 0, "item1");
menu.add(0,Menu.FIRST + 1, 0, "item2");
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//某项ContextMenu的item被选择时
if(item.getItemId() == Menu.FIRST)
{
//item1被选择时,
doSomething();
}
return super.onContextItemSelected(item);
}
@Override
public void onContextMenuClosed(Menu menu) {
// TODO Auto-generated method stub
//当ContextMenu关闭时被调用,如果有必要可以进行某些操作
super.onContextMenuClosed(menu);
}
}
Activity因为已经implements OnCreateContextMenuListener ;所以在Activity中的任何一个视图都可以按照上述步骤实现ContextMenu的相关操作
View 中实现ContextMenu ,可以直接继承onCreateContextMenuListener,也可以直接new 一个onCreateContextMenuListener
1. 继承onCreateContextMenuListener
class MyView extends View implements OnCreateContextMenuListener
{
public void onResume()
{
...
setOnCreateContextMenuListener(this);
....
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.add(0, MENU_READ, 0, R.string.menu_item1).setOnMenuItemClickListener(mMenuItemClicked);
menu.add(0, MENU_UNREAD, 0, R.string.menu_item2).setOnMenuItemClickListener(mMenuItemClicked);
}
}
2. new onCreateContextMenuListener
class MyView extends View implements OnCreateContextMenuListener
{
public void onResume()
{
...
setOnCreateContextMenuListener(contextMenuListener );
....
}
private OnCreateContextMenuListener contextMenuListener = new OnCreateContextMenuListener(){ @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.add(0, MENU_READ, 0, R.string.menu_item1).setOnMenuItemClickListener(mMenuItemClicked);
menu.add(0, MENU_UNREAD, 0, R.string.menu_item2).setOnMenuItemClickListener(mMenuItemClicked);
}
}
另外:由于系统对某些视图已经定义了某些ContextMenu,因此在自己添加ContextMenu时,并不会影响到系统的注册的ContextMenu,系统会自行将两个Menu的item进行合并再进行显示。