在android中,我创建了这样的菜单项?
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Menu1");
menu.add(0, 1, 0, "Menu2");
return true;
}
如何设置所有菜单项以程序方式禁用(在我的活动中的代码的另一部分,而不是onCreateOptionsMenu()方法本身)?
谢谢。
答案 0 :(得分:9)
您可以使用{I}设置的groupId一次禁用/启用所有菜单项。因此,例如,由于您将项目添加到组0,您可以执行以下操作:
menu.setGroupEnabled()
另外,如果要动态修改菜单,则应该挂钩menu.setGroupEnabled(0, false);
。 onPrepareOptionsMenu()
仅在每个Activity中调用一次,因此最适合设置初始菜单结构,但是onCreateOptionsMenu()
应该用于稍后在Activity中启用/禁用菜单。
答案 1 :(得分:6)
add
会返回MenuItem
(您也可以从Menu
对象中检索),您可以将其存储到变量中。
MenuItem menu1;
public boolean onCreateOptionsMenu(Menu menu) {
menu1 = menu.add(0, 0, 0, "Menu1");
}
public void someOtherMethod() {
if(menu1 != null) {
// if it's null, options menu hasn't been created, so nevermind
menu1.setEnabled(false);
}
}
答案 2 :(得分:5)
如果不应该使用它们(而不是禁用它们),我宁愿完全隐藏它们。 为此我做了:
menu.clear();
并重新创建它:
invalidateOptionsMenu();
这也适用于从片段添加的菜单项。
答案 3 :(得分:2)
如果仍然相关:
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
for(int i=0; i<menu.size(); i++){
menu.getItem(i).setEnabled(isMenuEnabled);
}
}
并调用invalidateOptionsMenu()然后更改isMenuEnabled
答案 4 :(得分:0)
如果您想多次使用菜单的所有项目(例如,更改“已检查”状态),可以使用Kotlin Extension Properties解决方案: (建立在answer of Valery之上)
在一处定义android.view.Menu的属性“ items”:
import android.view.Menu
import android.view.MenuItem
val Menu.items: List<MenuItem>
get() {
val items = mutableListOf<MenuItem>()
for (i in 0 until this.size()) {
items.add(this.getItem(i))
}
return items
}
现在您可以在任何菜单上使用它:
anyMenu.items.forEach { it.isEnabled = false }