学而实习之 不亦乐乎

Android:弹出菜单(PopupMenu)的使用

2022-07-29 09:16:25

一、简介

PopupMenu 是依赖 View 存在的模态菜单。如果空间足够,它将显示在相应View的下方,否则显示在其上方。

弹出菜单的使用步骤如下:

  1. 实例化PopupMenu,它的构造方法需要两个参数,分别为Context以及PopupMenu依赖的View对象。
  2. 使用MenuInflater将Menu资源加载到PopupMenu.getMenu()返回的Menu对象中。
  3. 调用setOnMenuItemClickListener方法为PopupMenu设置点击监听器。
  4. 调用PopupMenu.show()将弹出菜单显示出来。

二、实例

XML代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/popup_add"
        android:title="添加"/>
    <item android:id="@+id/popup_delete"
        android:title="删除"/>
    <item android:id="@+id/popup_more"
        android:title="更多"/>
</menu>

Java代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_popup_menu);
 
    findViewById(R.id.popup_menu_view).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PopupMenu popupMenu=new PopupMenu(PopupMenuActivity.this,view);//1.实例化PopupMenu
            getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu());//2.加载Menu资源
 
            //3.为弹出菜单设置点击监听
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()){
                        case R.id.popup_add:
                            Toast.makeText(PopupMenuActivity.this,"添加",Toast.LENGTH_SHORT).show();
                            return true;
                        case R.id.popup_delete:
                            Toast.makeText(PopupMenuActivity.this,"删除",Toast.LENGTH_SHORT).show();
                            return true;
                        case R.id.popup_more:
                            Toast.makeText(PopupMenuActivity.this,"更多",Toast.LENGTH_SHORT).show();
                            return true;
                        default:
                            return false;
                    }
                }
            });
            popupMenu.show();//4.显示弹出菜单
        }
    });
}

当用户选择菜单项或触摸菜单以外的区域时,系统就会清除弹出菜单,可以使用 PopupMenu.OnDismissListener() 监听这一事件。