所以,这就是我想知道的。如何在Android中以编程方式设置菜单的可见性?这就是我的菜单:
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected (MenuItem item){
switch (item.getItemId()){
case R.id.menuregistrar:
break;
case R.id.menusalir:
break;
}
return true;
}
但是这个代码不在onCreate上,所以我不知道如何以编程方式设置一个项目可见或不可见(在我的情况下,我希望“menuregistrar”在我注册我的应用程序后永远不可见。
答案 0 :(得分:128)
将此方法放在Activity
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem register = menu.findItem(R.id.menuregistrar);
if(userRegistered)
{
register.setVisible(false);
}
else
{
register.setVisible(true);
}
return true;
}
在更短的版本中你可以写:
MenuItem register = menu.findItem(R.id.menuregistrar);
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not.
return true;
答案 1 :(得分:8)
我将通过以下方式进一步简化Adil的解决方案:
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem registrar = menu.findItem(R.id.menuregistrar);
registrar.setVisible(!isRegistered);
return true;
}
答案 2 :(得分:3)
使用public boolean onPrepareOptionsMenu (Menu menu)
每当您按下菜单按钮并在那里执行操作时都会调用它。或者在不同的活动中使用你的oncreateoptionsmenu()来膨胀不同的菜单 - 这个菜单只被调用一次。
干杯
答案 3 :(得分:2)
菜单对象具有使用setVisible(boolean)//
设置菜单项目可见性的属性实施例
private Menu menu_change_language;
...
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
...
menu_change_language = menu;
...
...
return super.onCreateOptionsMenu(menu);
}
使用下面的代码隐藏菜单项:
if(menu_change_language != null){
menu_change_language.findItem(R.id.menu_change_language)
.setVisible(false);
}
答案 4 :(得分:1)
如果您想在每次单击菜单时更改onOptionsItemSelected内部的可见性
@Override
public boolean onOptionsItemSelected(MenuItem item) {
item.setVisible(true);
return true;
}
或 菜单中您没有单击的项目
private Menu globalMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu."menu Xml Name", menu);
globalMenuItem = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
globalMenuItem.findItem(R.id."id of the menu item").setVisible(true);
return true;
}
答案 5 :(得分:1)
只需执行以下操作即可从此行获取菜单项的ID:
Menu menu =navigationView.getMenu();
MenuItem nav_dashboard = menu.findItem(R.id.nav_dashboard);
,而不是通过此行将其显示给您:
nav_dashboard.setVisible(true/false);