android - 检测到 PopupMenu 在 API 级别 11 上关闭

标签 android popupmenu

我有这个PopupMenu在我的应用程序中,想知道它什么时候关闭。 使用 API14+,使用 setOnDismissListener() 添加关闭监听器时,这很容易。 但是,我需要知道 PopupMenu 何时从 API11+ 关闭,所以我不能使用监听器并且需要监听器的替代方案。

我已经尝试过:

  • 覆盖PopupMenu的dismiss()方法,但关闭时不调用。
  • 使用 PopupMenu.OnMenuItemClickListener,但当用户在菜单外单击(关闭它)或单击“返回”时,它不会被激活。

我没有任何其他想法来检测菜单已关闭。所以我希望其他人有一个聪明的把戏。否则我无法使用 PopupMenu...

最佳答案

你可以尝试覆盖方法

public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing)

PopupMenu 类。确切地说,此方法是在 API 14+ 内部调用 setOnDismissListener()。但这并不容易做到。问题是什么类 com.android.internal.view.menu.MenuBuilder 没有包含在 Android SDK 中,所以如果您尝试导入这个类,您将无法编译您的代码。

然而,你可以创建你自己的这个类的“假”实现,将它放在包 com.android.internal.view.menu 中,制作一个 .jar文件,将这个“假库”复制到 libs 文件夹,并在 IntelliJ IDEA 的项目设置中将此库的范围设置为“已提供”。这意味着这个 jar 文件中的类已经有了真实的设备(这是真的),你只需要它们来编译你的代码。这里的主要思想 - 你的假 MenuBuilder 应该在 javac 编译的类路径中,但应该包含在生成的 .apk 文件。

这不是简单的解决方案,但应该可行。

关于android - 检测到 PopupMenu 在 API 级别 11 上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905048/

相关文章:

android - React Native ./gradlew assembleRelease assembleAndroidTest失败: “More than one file found with OS independent path”

android - EditText TextInputLayout 提示文字对齐 : Is there a way to align hint text like textAlignment property of EditText view

android - 使用 go-gcm 发送 XMPP 推送通知时正确的错误处理?

delphi - 如何找出 TMenuItem 属于哪个 TPopupMenu

java - 寻找 : A popup implementation in a Java library, 并执行特定操作

java - 动态地将项目添加到一组 PopupMenu

android/chrome 网络字体渲染问题 - 垂直/宽度裁剪

安卓开发 : Getting key events from onscreen (soft) keyboard

delphi - 如何创建带有下拉菜单的按钮?

javascript - android如何像GMail一样在webview中显示PopupMenu