欢迎访问宙启技术站
智能推送

Android 实现长按弹出PopupMenu 菜单栏

发布时间:2023-05-15 06:29:44

PopupMenu 是 Android 基础控件之一,用于在长按控件时弹出菜单,供用户选择操作。在实际应用中,例如聊天软件中长按消息,会弹出删除、复制等操作的选择菜单。

本文将介绍 Android Studio 中如何通过 PopupMenu 方式实现长按弹出菜单栏。

1.准备工作

在 Android Studio 中添加 PopupMenu 控件需要先在 build.gradle 文件中添加依赖库。在 app/build.gradle 文件中添加以下依赖库代码:

dependencies { 
  //...
  implementation 'com.android.support:appcompat-v7:28.0.0' 
  //... 
}

2.添加 PopupMenu 控件

在 activity 或 fragment 布局文件中添加一个 Button 控件,在该 Button 控件上添加长按事件。

在按钮布局文件中添加长按事件:

<Button 
  android:id="@+id/btn_popmenu_snack" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:text="POPUPMENU" 
  android:textSize="20sp" 
  android:textColor="#FFFFFF" 
  android:background="@drawable/btn_bg"/> 

在 activty 或 fragment 中添加长按事件:

Button btnPopMenuSnack=findViewById(R.id.btn_popmenu_snack);
btnPopMenuSnack.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        //返回false表示不消费,事件继续向下传递 
        //返回true表示自己已经消费了这个事件 
        showPopMenu(v);
        return true;
    }
});

在长按事件中调用 showPopMenu 方法,用于弹出 PopupMenu 菜单栏。

3.弹出 PopupMenu 菜单栏

弹出 PopupMenu 菜单栏通过 PopupMenu 类实现,可定义 PopupMenu 菜单栏的显示位置、显示动画等参数。

在 showPopMenu 方法中定义 PopupMenu 菜单栏:

private void showPopMenu(View v) {
  //参数1:上下文;参数2:显示在哪个控件的下方;参数3:显示的位置,0即为控件下方;参数4:样式资源id
  PopupMenu popupMenu = new PopupMenu(this, v, 0, R.style.PopupMenuStyle); 

  //获取PopupMenu菜单栏的Menu,用于向其中添加菜单项
  Menu menu = popupMenu.getMenu();
  //添加菜单项
  menu.add(Menu.NONE, 1, Menu.NONE, "菜单1");
  menu.add(Menu.NONE, 2, Menu.NONE, "菜单2");
  menu.add(Menu.NONE, 3, Menu.NONE, "菜单3");

  //设置菜单项点击监听器
  popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
    @Override
    public boolean onMenuItemClick(MenuItem item) {
      switch (item.getItemId()) {
        case 1: 
          //菜单1
          return true;
        case 2: 
          //菜单2
          return true;
        case 3: 
          //菜单3
          return true;
        default: 
          return false;
      }
    }
  });
  //显示PopupMenu菜单栏
  popupMenu.show();
}

通过 PopupMenu 类,既可以添加菜单项,也可以设置菜单项的点击监听器,来处理菜单的点击事件。

4.设置 PopupMenu 样式

PopupMenu 的样式可以在 PopupMenuStyle.xml 文件中定义。在 res/values 文件夹中新建 PopupMenuStyle.xml 文件,添加以下代码:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
  <style name="PopupMenuStyle" parent="android:Theme.Holo.Light">
    <item name="android:popupBackground">@color/white</item> 
    <item name="android:textColor">@color/black</item> 
  </style>
</resources>

在 PopupMenuStyle.xml 文件中,可以定义 PopupMenu 的背景色、文字颜色等属性,让 PopupMenu 的样式符合自己应用的风格。

以上就是使用 PopupMenu 控件实现长按弹出菜单栏的步骤以及注意事项。通过 PopupMenu 控件,可以快速方便地实现长按弹出菜单栏的效果,提升用户体验。