Android ContextMenu

来源:互联网 发布:brett anderson知乎 编辑:程序博客网 时间:2024/05/21 10:51

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进行合并再进行显示。

原创粉丝点击