我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?
这就是我想做的:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?
这就是我想做的:
MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();
当前回答
你可以调用它:
MenuItem item = menu.findItem(R.id.my_item);
item.setVisible(false);
更新:
确保您的代码不为item返回null,否则可能导致应用程序崩溃。
其他回答
这个代码对我有用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu,menu);
if (Application.sharedPreferences.getInt("type",1) == 2)
{
menuItem = menu.findItem(R.id.menu_travel_orders);
menuItem.setVisible(false);
}
return super.onCreateOptionsMenu(menu);
}
使用invalidateOptionsMenu ()
为了调用onprepareoptionmenu(菜单:菜单?)
你应该使用onCreateOptionsMenu()只创建初始菜单状态,而不是在活动生命周期中进行更改… 当一个事件发生并且你想要执行菜单更新时,你必须调用invalidateOptionsMenu()来请求系统调用onPrepareOptionsMenu()。
https://developer.android.com/guide/topics/ui/menus
获取一个指向这样的菜单项,调用setVisible来调整它的可见性,然后在你的活动上调用invalidateOptionsMenu(),这样动作栏菜单就会相应调整。
更新:菜单项不是常规视图,它是布局的一部分。它很特别,完全不同。你的代码为item返回null,这导致了崩溃。你需要做的是:
MenuItem item = menu.findItem(R.id.addAction);
下面是你应该调用的顺序: 首先调用invalidateOptionsMenu(),然后在onCreateOptionsMenu(Menu)内部获得对MenuItem的引用(通过调用Menu . finditem())并在其上调用setVisible()
用一个命令隐藏菜单中所有项的最好方法是在菜单xml中使用“group”。只需将溢出菜单中的所有菜单项添加到同一组中即可。
在这个例子中,我们有两个永远显示的菜单项(常规项和搜索项)和三个溢出项:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/someItemNotToHide1"
android:title="ITEM"
app:showAsAction="always" />
<item
android:id="@+id/someItemNotToHide2"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
<group android:id="@+id/overFlowItemsToHide">
<item android:id="@+id/someID"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID2"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID3"
android:orderInCategory="1" app:showAsAction="never" />
</group>
</menu>
然后,在您的活动(首选在oncreateoptionsmmenu),使用命令setGroupVisible设置所有菜单项可见性为false或true。
public boolean onCreateOptionsMenu(Menu menu) {
menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
如果你想在活动的其他地方使用这个命令,请确保将菜单类保存到本地,并始终检查菜单是否为空,因为你可以在createOptionsMenu之前执行:
Menu menu;
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
}
public void hideMenus() {
if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
Android kotlin,隐藏或设置操作栏中菜单项的可见性。
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.main_menu, menu)
val method = menu.findItem(R.id.menu_method)
method.isVisible = false //if want to show set true
return super.onCreateOptionsMenu(menu)
}