2016-02-14 43 views
1

現在我有兩個按鈕,單擊時做不同的事情,但現在我希望其中一個單擊時顯示菜單,但我不知道如何做這個。如何在Android中的按鈕添加菜單

我的代碼是這樣的主按鈕:

public boolean onOptionsItemSelected(MenuItem item){ 
     switch(item.getItemId()) { 
      case R.id.button1: 
       //do stuff 
       break; 
      case R.id.button2: 
       //display menu 
       break; 
} 

如果按下按鈕2,我想顯示的選項列表,看看菜單項的用戶選擇,但我怎麼能做到這一點?在菜單

顯示圖標 XML

<item 
     android:id="@+id/item_1" 
     android:icon="@drawable/settings" 
     android:showAsAction="always" 
     android:title="Add item1" /> 
+0

什麼類型的菜單,你在說什麼?它是選項菜單嗎? –

回答

1

你可以使用一個PopupMenu在你onOptionsItemSelected()當點擊其中一個菜單按鈕時,它將顯示不同的菜單。根據您的需要修改這段代碼:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
     case R.id.button1: 

      // DO SOMETHING HERE 
      break; 

     case R.id.button2: 

      // THE R.id.button2 has to be the same as the item that will trigger the popup menu. 
      View v = findViewById(R.id.button2); 
      PopupMenu pm = new PopupMenu(LoginActivity.this, v); 
      pm.getMenuInflater().inflate(R.menu.pm_accounts_item, pm.getMenu()); 
      pm.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       @Override 
       public boolean onMenuItemClick(MenuItem item) { 
        Toast.makeText(getApplicationContext(), String.valueOf(item.getTitle()), Toast.LENGTH_SHORT).show(); 
        switch (item.getItemId()) { 

         case R.id.menuEdit: 
          break; 

         case R.id.menuDetails: 
          break; 

         case R.id.menuDelete: 
          break; 

         default: 
          break; 
        } 
        return true; 
       } 
      }); pm.show(); 

      break; 

     default: 
      break; 
    } 

    return false; 
} 

你會發現一個新的菜單XML已經在這條線被誇大:

pm.getMenuInflater().inflate(R.menu.pm_accounts_item, pm.getMenu()); 

你必須創建一個第二個菜單XML單擊其中一個按鈕時需要顯示的選項列表。這與您當前的菜單XML類似,不同之處在於一組不同的選項。

重要! 不要忘記在PopupMenu pm....之前包含此View v = findViewById(R.id.button2);。 PopupMenu需要一個View來錨定自己。但是onOptionsItemSelected()方法根本沒有提供。因此額外的陳述。

以上示例說明了Activity中的示例。要在Fragment使用,改變View v = findViewById(R.id.button2);View v = getActivity().findViewById(R.id.button2);

這是最後的結果是:

enter image description here

+1

我想我愛你...:D –

+0

是否有可能爲每個項目顯示圖標?我試圖將每個項目鏈接到一個圖標,但只顯示圖標的文本名稱。我添加了我在我的帖子中嘗試過的 –

+0

@swagantiswag:對不起,我不在這一段時間。默認的PopupMenu不支持圖標。但是,在這裏有幾個解決方案已經取得了成功。檢查這些:http://stackoverflow.com/q/6805756/450534,http://stackoverflow.com/q/15454995/450534。有一個Github Gist在這裏顯示圖標:https://gist.github.com/mediavrog/9345938 –

相關問題