如何在Android中的按钮中添加菜单

时间:2016-02-14 09:27:51

标签: android button menu

现在我有几个按钮在点击时会执行不同的操作,但现在我希望其中一个按钮在点击时显示一个菜单,但我不知道该怎么做。

我的代码对于主按钮是这样的:

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

如果按下button2,我想显示一个选项列表,看看用户选择了哪个菜单项,但我该怎么做?

在菜单中显示图标 XML

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

2 个答案:

答案 0 :(得分:2)

您可以使用PopupMenuonOptionsItemSelected()中,当您点击其中一个菜单按钮时,它会显示不同的菜单。根据您的需要修改这段代码:

@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,区别在于一组不同的选项。

重要! 不要忘记在View v = findViewById(R.id.button2);之前添加此PopupMenu pm....。 PopupMenu需要View来锚定自己。但onOptionsItemSelected()方法根本不提供此功能。因此,额外的声明。

以上示例说明了Activity中的示例。要在Fragment中使用此功能,请将View v = findViewById(R.id.button2);更改为View v = getActivity().findViewById(R.id.button2);

这是最终结果:

enter image description here

答案 1 :(得分:0)

如果您正在谈论打开选项菜单,那么openOptionMenu()课程中有Activity方法。

case R.id.button2:
            openOptionsMenu();
            break;

如果您正在谈论打开contextMenu 您必须致电openContextMenu()方法,但不要忘记添加registerForContextMenu(view)和其他采取行动的方法