- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用此代码将选项菜单作为弹出窗口打开:
@Override
public boolean onPrepareOptionsMenu(Menu menu){
openMenu();
return true;
}
private void openMenu(){
View popUpView = getLayoutInflater().inflate(R.layout.menu, null);
popUpMenu = new PopupWindow(popUpView, LayoutParams.FILL_PARENT
, LayoutParams.WRAP_CONTENT
, true);
popUpMenu.setBackgroundDrawable(new BitmapDrawable());
popUpMenu.setAnimationStyle(android.R.style.Animation_Dialog);
popUpMenu.showAtLocation(popUpView, Gravity.BOTTOM, 0, 0);
makePopUpMenuButtons(popUpView);
}
问题是,在 Android 4.1 上,菜单只打开一次。我读了一些关于 invalidateOptionsMenu() 的内容,但我不知道在哪里实现这个方法。 eclipse 还说“方法 invalidateOptionsMenu() 未在...上定义”。
有谁知道如何在每次单击菜单按钮时打开选项菜单?
编辑:
我不使用 android 菜单对象,因为我想要自定义设计。这就是我在 onPrepareOptionsMenu 中创建弹出窗口的原因。所以我不使用 onOptionsItemSelected。我的问题是 onPrepareOptionMenu 只在第一次点击时被调用,之后只是不规则的。
On Android 3.0 and higher, the options menu is considered to always be open when menu items are presented in the action bar. When an event occurs and you want to perform a menu update, you must call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().
这一段说当我的 API 是 3.0 或更高版本时我必须调用 invalidateOptionsMenu。但在我的项目中,API 低于 4.1 时一切正常。我试图在显示弹出窗口后调用 invalidateOptionsMenu,但 eclipse 给出了一个错误,因为该方法未定义...
最佳答案
下面会让事情更清楚:
<强>1。 onCreateOptionsMenu()
要为 Activity 指定选项菜单,您需要覆盖 onCreateOptionsMenu()
。在此方法中,您可以将菜单资源(以 XML 定义)扩展到回调中提供的菜单中。对于 Android 2.3.x 及更低版本
,系统会在用户首次打开菜单时调用 onCreateOptionsMenu()
创建选项菜单。但是对于 Android 3.0 及更高版本
,系统会在启动 Activity 时调用 onCreateOptionsMenu()
,以便向操作栏显示项目。
系统调用onCreateOptionsMenu()
后,它会保留您填充的Menu的一个实例,不会再次调用onCreateOptionsMenu()
,除非菜单因某种原因失效.但是,您应该仅使用 onCreateOptionsMenu()
来创建初始菜单状态,而不是在 Activity 生命周期中进行更改。
<强>2。 onOptionsItemSelected()
当您从选项菜单中选择一个项目时,系统会调用您 Activity 的 onOptionsItemSelected()
方法。此方法传递选定的 MenuItem。
<强>3。 onPrepareOptionsMenu()
如果您想根据 Activity 生命周期中发生的事件修改选项菜单,您可以在 onPrepareOptionsMenu()
方法中执行此操作。此方法将 Menu 对象传递给您,因为它当前存在,因此您可以修改它,例如添加、删除或禁用项目。
在 Android 2.3.x 和更低版本
上,每次用户打开选项菜单(按下菜单按钮)时,系统都会调用 onPrepareOptionsMenu()
。
在 Android 3.0 及更高版本
上,当菜单项显示在操作栏中时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,您必须调用 invalidateOptionsMenu()
以请求系统调用 onPrepareOptionsMenu()
。
对于 invalidateOptionsMenu()
Refer this
对于 onPrepareOptionsMenu()
Refer this
因此您可以尝试如下操作:
为了处理向后兼容性,请在您的 Activity 中添加以下内容。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.Menu1:
refreshMenu();
break;
case R.id.Menu2:
refreshMenu();
break;
}
return super.onOptionsItemSelected(item);
}
public void refreshMenu() {
if (Build.VERSION.SDK_INT >= 11) {
invalidateOptionsMenu();
}
}
您也可以refer this
关于android - OptionsMenu 在 Android 4.1 上只打开一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514311/
伙计们。 问题来了。假设我的菜单上有三样东西。我希望第一个不可见(如透明)但同时占用空间。第二个和第三个可以正常显示。 谢谢 编辑: 我的菜单上有三个项目。我有垂直排列的菜单,所以像这样: Menu:
我正在尝试制作一个简单的 Activity,它有一个带有两个按钮的菜单。第一个按钮将加载一个单独的 Activity ,而第二个按钮我现在无事可做。我在各处都放置了日志语句,但唯一执行的是 onCre
我想在屏幕顶部显示复选框以允许用户启用屏幕锁定,我只想在他打开选项菜单时显示该复选框。我可以通过覆盖这两种方法来做到这一点 @Override public boolean onMenuOpened(
在我的项目中,我试图以编程方式打开optionsMenu,而无需单击用户的menu 键。我试过 openOptionsMenu() 但它给了我这样的错误 android.view.WindowMana
问题是,如果我按下 OptionsMenu 的硬件按钮,应用程序会卡住,半秒后 fragment View 会消失。 没有 LogCat 错误,这让我有些困惑。菜单在六分之一的 fragment 中不
我只是想知道是否可以在我单击图像时显示我的选项菜单。现在,当单击菜单按钮时,我已经显示了我的选项菜单。但是我也想在用户点击我的 imageView 时显示它。这可能吗? 最佳答案 终于发现这么简单了。
我知道以下可能不是最佳实践,也不推荐这样做。 我有一个向服务器发送数据的 AsyncTask。我需要做的整个过程包括快速连续使用此 AsyncTask 的 4 个 Web 调用。 我了解使用 Asyn
我尝试使用 fragment 更改我的应用程序的 View 。我试了几天,所以我做了一个干净的代码来展示我的问题。我有一个带有 OptionsMenu 的 MainActivity,在这个 Optio
我需要以编程方式创建菜单(与选项卡列表完全相同)以支持我的应用程序中的导航。所以我做了这样的代码 public override bool OnCreateOptionsMenu (IMenu men
我使用在我的主机 Activity MenuActivity 中实现的 NavigationDrawer 模式。我的导航有 3 个项目:项目 1、项目 2、项目 3。每个项目都绑定(bind)到一个
试图了解导致我的 Activity 窗口泄漏的原因。该 Activity 扩展了 AppCompatActivity。它有一个单一的 View ,其中有一个 RecyclerView 和一个在旋转时不
我有一个可用的 SearchView,当用户点击搜索图标时,它会在我的 OptionsMenu 中展开。但是,它仅在其他 OptionsMenu 图标之间的可用空间内扩展。在宽屏幕上这很好,但在狭窄的
我正在使用以下代码创建数据表 ' href='#'>
我有一个带有子项目菜单的选项菜单 当我单击选项菜单时,我的应用程序崩溃,但无法解密日志 我想要一个选项按钮来打开 3 个选项菜单子(monad)项 我检查了一些教程,但我看不出我错在哪里
我在为我的 App 设置首选项时遇到问题。 我想在 ActionBar 中有一个按钮(例如保存),但我的 ActionBar 没有显示任何内容。我将这一行放在 onCreate 方法中: this.s
我正在使用 ActionBarSherlock,我正在尝试使用 viewpager 实现嵌套 fragment 结构。 我有一个包含一些 View 和包装 fragment (FragmentA) 的
我正在使用此代码将选项菜单作为弹出窗口打开: @Override public boolean onPrepareOptionsMenu(Menu menu){ openMenu();
我正在创建 Android 应用程序,我正在尝试尽可能多地遵守最新的 Android 可用性标准。特别是,我正在使用抽屉导航准备用户界面,并试图确保与 2.1+ Android 版本的兼容性。为了理解
我在 viewpager 中有三个 fragment 。 其中两个 fragment 有它们自己版本的 onCreateOptionsMenu 方法: @Override public void o
我已经开发了大约 6 个月的应用程序。它在某些屏幕上使用选项菜单。它一直有效,直到我将 eclipse 从 api ~14 更新到 17。我也更新了工具。 选项菜单不再存在谁能告诉我为什么?在 api
我是一名优秀的程序员,十分优秀!