MyException - 我的异常网
当前位置:我的异常网» Android » Android以上下文菜单Context Menu

Android以上下文菜单Context Menu

www.MyException.Cn  网友分享于:2013-06-30  浏览:42次
Android之上下文菜单Context Menu

1:获取其它应用的上下文对象

 

Context otherAppContext = this.getContext().createPackageContext("wjh.android.set", Context.CONTEXT_IGNORE_SECURITY);
 // wjh.android.set 是另一个应用的包名

 

 

上面代码根据其它应用的包名,创建了其它原因的上下文对象。

2:上下文菜单Context Menu   

 

  

 

  • 注意:上下文菜单项不支持图标或快捷键。   
  •   

     

  • 为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu() 和onContextItemSelected()。在回调函数onCreateContextMenu()里,你可以通过使用一个add()方法来添加菜单项,或者通过扩充一个定义在XML中的菜单资源。然后,通过registerForContextMenu()为这个视图注册一个上下文菜单ContextMenu.   
  •   

     

  • 比如,下面的代码可以被用到Notepad应用程序中来为列表中的每一个注释添加一个上下文菜单:
  •  

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
        super.onCreateContextMenu(menu, v, menuInfo); 
        menu.add(0, EDIT_ID, 0, "Edit"); 
        menu.add(0, DELETE_ID, 0, "Delete"); 
    } 
    public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
        case EDIT_ID: 
            editNote(info.id); 
            return true; 
        case DELETE_ID: 
           deleteNote(info.id); 
           return true; 
        default: 
          return super.onContextItemSelected(item); 
       } 
    } 

     

  • 在onCreateContextMenu()中,除了给出将添加MenuItems的ContextMenu外,还需要给定选中的视图和一个上下文菜单信息ContextMenuInfo对象,该对象提供了选中对象的附加信息。在本例中,onCreateContextMenu()没做什么特别的事-只是添加了一些菜单项。在onContextItemSelected() 回调函数中,我们从MenuItem中请求AdapterContextMenuInfo,该对象提供当前选中项的信息。我们从中所要的只是这个选中项的列表ID,所以无论编辑还是删除一个注释,我们通过这个对象的AdapterContextMenuInfo.info字段来找到该ID。这个ID被传递给editNote() 和deleteNote()方法来执行相应的动作。   
  •  

      

     

  • 现在,要为一个列表视图中的所有项注册上下文菜单,我们可以传递整个的列表视图对象给registerForContextMenu(View) 方法:   
  •   

     //为 ListView 的所有 item 注册 ContextMenu
       registerForContextMenu(getListView());   
    
    //这里的registerForContextMenu()也可以用下面的语句替代
    
    
    //getListView().setOnCreateContextMenuListener(this);
    
    
    

      

  • 记住,你可以传递任何视图对象来注册一个上下文菜单。这里,getListView()返回这个被用于Notepad应用程序的列表活动ListActivity中的列表视图对象。这样,这个列表中的任何item都被注册到这个上下文菜单。
  •  

        长按事件可以使用ListView的setOnItemLongClick函数进行关联,但是在响应的onItemLongClick函数里面没办法调用ListView显示菜单。
        在Android的菜单分两种:options menu 、context menu 。(也有分三种的:options menu 、context menu、sub menu)其中options menu是和Activity相关联的,context menu 是和View关联。我们需要点击控件出现的菜单属于context menu ;但是context menu 只能通过setOnCreateContextMenuListener来进行关联。
         实现这个效果需要理解对ListView的item长按之后发生的事情:
        首先触发的是onItemLongClick函数,执行onItemLongClick操作,然后根据onItemLongClick的返回值判断是不是执行OnCreateContextMenuListener函数;如果onItemLongClick返回false,则会继续执行OnCreateContextMenuListener函数,否则返回true,忽略OnCreateContextMenuListener函数。
        因此我们可以在onItemLongClick的时候进行判断并且准备好OnCreateContextMenuListener中需要用到的数据,然后在OnCreateContextMenuListener中调用这些数据显示即可。

  • Android的上下文菜单在概念上和PC软件的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。 (电话联系人列表提供了关于这个特性的一个很好的例子)。   
  • 文章评论

    写给自己也写给你 自己到底该何去何从
    写给自己也写给你 自己到底该何去何从
    程序员周末都喜欢做什么?
    程序员周末都喜欢做什么?
    Web开发者需具备的8个好习惯
    Web开发者需具备的8个好习惯
    看13位CEO、创始人和高管如何提高工作效率
    看13位CEO、创始人和高管如何提高工作效率
    那些争议最大的编程观点
    那些争议最大的编程观点
    程序员和编码员之间的区别
    程序员和编码员之间的区别
    十大编程算法助程序员走上高手之路
    十大编程算法助程序员走上高手之路
    初级 vs 高级开发者 哪个性价比更高?
    初级 vs 高级开发者 哪个性价比更高?
    “肮脏的”IT工作排行榜
    “肮脏的”IT工作排行榜
    亲爱的项目经理,我恨你
    亲爱的项目经理,我恨你
    60个开发者不容错过的免费资源库
    60个开发者不容错过的免费资源库
    老程序员的下场
    老程序员的下场
    总结2014中国互联网十大段子
    总结2014中国互联网十大段子
    老美怎么看待阿里赴美上市
    老美怎么看待阿里赴美上市
    10个帮程序员减压放松的网站
    10个帮程序员减压放松的网站
    “懒”出效率是程序员的美德
    “懒”出效率是程序员的美德
    一个程序员的时间管理
    一个程序员的时间管理
    每天工作4小时的程序员
    每天工作4小时的程序员
    程序员必看的十大电影
    程序员必看的十大电影
    团队中“技术大拿”并非越多越好
    团队中“技术大拿”并非越多越好
    漫画:程序员的工作
    漫画:程序员的工作
    聊聊HTTPS和SSL/TLS协议
    聊聊HTTPS和SSL/TLS协议
    10个调试和排错的小建议
    10个调试和排错的小建议
    如何区分一个程序员是“老手“还是“新手“?
    如何区分一个程序员是“老手“还是“新手“?
    我是如何打败拖延症的
    我是如何打败拖延症的
    Web开发人员为什么越来越懒了?
    Web开发人员为什么越来越懒了?
    代码女神横空出世
    代码女神横空出世
    我的丈夫是个程序员
    我的丈夫是个程序员
    要嫁就嫁程序猿—钱多话少死的早
    要嫁就嫁程序猿—钱多话少死的早
    程序员都该阅读的书
    程序员都该阅读的书
    旅行,写作,编程
    旅行,写作,编程
    如何成为一名黑客
    如何成为一名黑客
    当下全球最炙手可热的八位少年创业者
    当下全球最炙手可热的八位少年创业者
    我跳槽是因为他们的显示器更大
    我跳槽是因为他们的显示器更大
    程序员眼里IE浏览器是什么样的
    程序员眼里IE浏览器是什么样的
    鲜为人知的编程真相
    鲜为人知的编程真相
    不懂技术不要对懂技术的人说这很容易实现
    不懂技术不要对懂技术的人说这很容易实现
    程序员的鄙视链
    程序员的鄙视链
    程序员最害怕的5件事 你中招了吗?
    程序员最害怕的5件事 你中招了吗?
    为什么程序员都是夜猫子
    为什么程序员都是夜猫子
     程序员的样子
    程序员的样子
    5款最佳正则表达式编辑调试器
    5款最佳正则表达式编辑调试器
    为啥Android手机总会越用越慢?
    为啥Android手机总会越用越慢?
    科技史上最臭名昭著的13大罪犯
    科技史上最臭名昭著的13大罪犯
    Java程序员必看电影
    Java程序员必看电影
    软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有