像在 ICS 中一样在 android 2.x 中创建下拉菜单的最佳方法

Posted

技术标签:

【中文标题】像在 ICS 中一样在 android 2.x 中创建下拉菜单的最佳方法【英文标题】:The best way to create drop down menu in android 2.x like in ICS 【发布时间】:2012-06-30 12:45:04 【问题描述】:

我想创建带有下拉菜单的按钮,例如 ICS 上 ActionBar 中的溢出菜单按钮。我有问题,因为 android 2.x 中没有 PopupMenu。使用 Spinner 的第二种方式,但它不适合我,因为 Spinner 总是在我的自定义背景或我选择的项目上显示第一个项目。我怎样才能实现它?一般来说,我想要 ContextMenu 但很少和位置点击视图。谢谢。

看起来像这样:

【问题讨论】:

【参考方案1】:

如果您的目的是重新创建操作栏,您可以查看ActionBarSherlock 项目,该项目支持这些功能。

如果您希望能够在应用程序的任何位置弹出这样的菜单,您可以阅读ActionBarSherlock 项目源代码中的MenuPopupHelper 类实现。

【讨论】:

好的。我认为最好的答案是你的。但我决定只使用上下文菜单,因为我看不到使用 popupMenu 的简单方法。【参考方案2】:

我使用PopupWindow 来处理这类事情。它比 PopupMenu 更有效,您只需给它一个菜单并使用OnMenuItemClickListener.onMenuItemClick() 响应事件。使用 PopupWindow,您可以提供内容视图并在较低级别处理点击。

不过,它可以轻松完成工作。 showAsDropDown() 方法允许您根据需要将弹出窗口锚定到另一个视图(将其适当地定位为下拉菜单或弹出菜单)。它从 API 级别 1 开始就已经存在,并且在我的所有测试设备上都非常适合我。

【讨论】:

【参考方案3】:

您的要求的替代方案可能是,您创建一个列表视图,将其放置在您的按钮下并将其默认设置为不可见,当您单击按钮时,您可以切换列表视图的可见性...。 例如

button.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                // TODO Auto-generated method stub
                if (LISTVIEW.isShown()) 
                    LISTVIEW.setVisibility(View.INVISIBLE);
                 else 
                    LISTVIEW.setVisibility(View.VISIBLE);
                

如果这有帮助,请告诉我...

【讨论】:

这是一个很好的方法。你能控制 ListView 的放置位置吗? 你可以把它放在任何你想放的地方,但我想你需要硬编码它的尺寸。

以上是关于像在 ICS 中一样在 android 2.x 中创建下拉菜单的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Android:像在 iOS 中一样逐步获取 HTTP 响应

Android如何像在iOS中一样将异步任务分组在一起

我如何在 Intellij Idea 中找到构建变体,就像在 Android Studio 中一样?

如何在 Android 中像在 Google 地图中一样获得持续的位置更新?

是否可以像在 Android Studio 中一样在 Eclipse 中使用 Firebase? [复制]

Swift3 如何像在 android 中一样在 iOS 中实现底部工作表