2016-09-18 160 views
0

我想使用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; 
     } 

    }); 
} 

回答