创建菜单项的弹出窗口(或上下文)菜单

问题描述:

我想使用Android支持设计库中的菜单。当我长时间按下时,我想创建该项目的弹出菜单或上下文菜单。 我已经试过this但没有任何反应。我知道我可以在导航项中使用自定义布局,但默认项目看起来不错,所以我想与他们合作。创建菜单项的弹出窗口(或上下文)菜单

这里是我menu.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:title="SubMenuTitle"> 

      <menu> 
      <group android:checkableBehavior="single"> 
       <item 
        android:id="@+id/myId" 
        android:icon="@drawable/ic_menu_camera" 
        android:title="SubMenuItem" 
        /> 
      </group> 
      </menu> 

     </item> 
     <item 
      android:id="@+id/nav_gallery" 
      android:clickable="true" 
      android:icon="@drawable/ic_menu_gallery" 
      android:title="Gallery" /> 
     <item 
      android:id="@+id/nav_slideshow" 
      android:icon="@drawable/ic_menu_slideshow" 
      android:title="Slideshow" /> 
     <item 
      android:id="@+id/nav_manage" 
      android:icon="@drawable/ic_menu_manage" 
      android:title="Tools" /> 
    </group> 

    <item android:title="Communicate"> 
     <menu> 
      <item 
       android:id="@+id/nav_share" 
       android:icon="@drawable/ic_menu_share" 
       android:title="Share" /> 
      <item 
       android:id="@+id/nav_send" 
       android:icon="@drawable/ic_menu_send" 
       android:title="Send" /> 
     </menu> 
    </item> 

</menu> 

而且一些代码

public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     //getMenuInflater().inflate(R.menu.activity_menu_drawer, menu); 
     for(int i = 0; i < menu.size(); i++){ 
      View v = new View(this); 
      registerForContextMenu(v); 
      v.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        //Your longclick listener callback logic goes here 
        Log.d("dbg", "longClicked"); 
        popup(v); 
        return false; 
       } 

      }); 
      menu.getItem(i).setActionView(v); 
     } 
     return true; 
    } 


private void popup(View v){ 
    PopupMenu pMenu = new PopupMenu(this, v); 
    pMenu.inflate(R.menu.popup_menu); 
    pMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ 
     @Override 
     public boolean onMenuItemClick(MenuItem item){ 
      Toast.makeText(MenuActivity.this, item.toString(), Toast.LENGTH_LONG).show(); 
      return true; 
     } 

    }); 
} 

你不是叫pMenu.show();