Android:如何启用/禁用button点击选项菜单项?

当我使用onCreateOptionsMenuonOptionsItemSelected方法时,我可以轻松地做到这一点。

但是我在屏幕上的某处有一个button,点击该button时,它应该启用/禁用上下文菜单项。

谢谢…

无论如何, 文件涵盖了所有的事情。

在运行时更改菜单项

一旦活动被创build, onCreateOptionsMenu()方法只被调用一次,如上所述。 系统保留并重新使用您在此方法中定义的Menu ,直到您的活动被破坏。 如果您想要在首次创build后更改选项菜单,则必须覆盖onPrepareOptionsMenu()方法。 这将传递给您当前存在的Menu对象。 如果您想根据应用程序的当前状态删除,添加,禁用或启用菜单项,这非常有用。

例如

 @Override public boolean onPrepareOptionsMenu (Menu menu) { if (isFinalized) { menu.getItem(1).setEnabled(false); // You can also use something like: // menu.findItem(R.id.example_foobar).setEnabled(false); } return true; } 

在Android 3.0及更高版本中,菜单项出现在操作栏中时,选项菜单始终处于打开状态。 当一个事件发生时,你想要执行一个菜单更新,你必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()

在所有的Android版本上,最简单的方法是:使用这个来显示一个菜单动作图标作为禁用,并使其function被禁用:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.menu_my_item); if (myItemShouldBeEnabled) { item.setEnabled(true); item.getIcon().setAlpha(255); } else { // disabled item.setEnabled(false); item.getIcon().setAlpha(130); } } 

您可以在创build选项菜单时将该项目保存为variables,然后随意更改其属性。

 private MenuItem securedConnection; private MenuItem insecuredConnection; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.connect_menu, menu); securedConnection = menu.getItem(0); insecuredConnection = menu.getItem(1); return true; } public void foo(){ securedConnection.setEnabled(true); } 

简化@Vikas版本

 @Override public boolean onPrepareOptionsMenu (Menu menu) { menu.findItem(R.id.example_foobar).setEnabled(isFinalized); return true; } 

当您在导航抽屉上执行时,这是最好的解决scheme

 @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.setGroupVisible(0,false); return true; } 

通常可以在运行时更改视图的属性:

 (Button) item = (Button) findViewById(R.id.idBut); 

接着…

 item.setVisibility(false) 

如果你想从ContextMenu中修改选项的可见性,按下你的button,你可以激活一个标志,然后在onCreateContextMenu你可以做这样的事情:

  @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(R.string.context_title); if (flagIsOn()) { addMenuItem(menu, "Option available", true); } else { Toast.makeText(this, "Option not available", 500).show(); } } 

我希望这有帮助