android - 如何在 Android 中将菜单添加到按钮

标签 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;
}

如果按下按钮 2,我想显示一个选项列表并查看用户选择的菜单项,但我该怎么做呢?

在菜单中显示图标 XML

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

最佳答案

你可以使用 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

关于android - 如何在 Android 中将菜单添加到按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390246/

相关文章:

java - Nougat - JobScheduler RESULT_SUCCESS 但作业没有输出

html - 如何使按钮宽度在媒体查询中起作用

asp.net - 如何在按下键盘中的 "enter"键时将焦点转移到按钮上

javascript - Jquery 确认不工作

php - Wordpress 导航菜单在 ul 之前添加 div

jquery - 在子菜单内切换子菜单

java - 理解 keystore 和 SSL 的问题

android - Realm Java 作为对原生 Android 库的依赖绑定(bind)到 Xamarin

java - 在 RecyclerView 关注之前的 EditText

java - 如何检查所选菜单项是否是菜单?