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

3

现在我有几个按钮,当点击时会执行不同的操作,但现在我想让其中一个按钮在被点击时显示一个菜单,但我不确定如何做到这一点。

我的主要按钮代码类似于:

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" />

你在谈论什么类型的菜单?是选项菜单吗? - Shree Krishna
2个回答

5

您可以在onOptionsItemSelected()中使用PopupMenu,当您的菜单按钮被点击时,它会显示不同的菜单。根据您的需求修改以下代码:

@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


是否可以为每个项目显示一个图标呢?我尝试将每个项目链接到一个图标,但只有图标的文本名称显示出来。我在帖子中添加了我尝试过的内容。 - swag antiswag
@swagantiswag:抱歉这段时间没能及时回复。默认的PopupMenu不支持图标,但是在Stack Overflow上有一些解决方案已经成功实现了这个功能。请查看以下链接:https://dev59.com/7mw15IYBdhLWcg3wIoRM,https://dev59.com/UWUp5IYBdhLWcg3wLlRV。此外,这里还有一个展示图标的Github Gist:https://gist.github.com/mediavrog/9345938。 - Siddharth Lele

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接