gpt4 book ai didi

android - 如何在代码中将子菜单项添加到 ActionBar 操作?

转载 作者:IT老高 更新时间:2023-10-28 13:21:05 26 4
gpt4 key购买 nike

通过 xml,我可以在 ActionBar 中将子菜单项添加到我的操作中。

enter image description here

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_new_form"
android:icon="@drawable/ic_new_form"
android:title="@string/menu_new_form"
android:showAsAction="ifRoom|withText">
<menu>
<item android:id="@+id/form1"
android:icon="@drawable/attachment"
android:title="Form 1"
android:onClick="onSort" />
<item android:id="@+id/form2"
android:icon="@drawable/attachment"
android:title="Form 2"
android:onClick="onSort" />
</menu>
</item>
</menu>

但是如何通过 Java 代码添加这些子项?它不起作用,如下所示,子项目被添加到错误的操作中(并且drawable也没有显示),非常正确的按钮,而不是我的“新表单”按钮:

enter image description here

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_new_form"
android:icon="@drawable/ic_new_form"
android:title="@string/menu_new_form"
android:showAsAction="ifRoom|withText">
</item>
</menu>

Java 代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);

Log.d("MainMenu", ",menu title0: " + menu.getItem(0).getTitle());
// returns "New Form"

menu.addSubMenu(0, Menu.NONE, 1, "Form 1").setIcon(R.drawable.attachment);
menu.addSubMenu(0, Menu.NONE, 2, "Form 2").setIcon(R.drawable.attachment);
return true;
}

有没有办法实现这一点,通过 Java 代码而不是 XML 添加子菜单项,无需使用 PopupMenu (http://developer.android.com/guide/topics/ui/menus.html#PopupMenu)?

更新(解决方案):

我最终得到的代码 fragment 是动态填充子菜单,遵循 adamp 的回复:

// menu options
private static final int MENU_PREFERENCES = Menu.FIRST;
private static final int MENU_LOGOUT = 2;

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
super.onCreateOptionsMenu(menu);

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
menu.add(0, MENU_PREFERENCES, 0, getString(R.string.general_preferences)).setIcon(
android.R.drawable.ic_menu_preferences);

// load all available form templates
Cursor c = managedQuery(FormsProviderAPI.FormsColumns.CONTENT_URI, null, null, null, null);
try {
int ixDisplayName = c.getColumnIndex(FormsProviderAPI.FormsColumns.DISPLAY_NAME);
int ixId = c.getColumnIndex(FormsProviderAPI.FormsColumns._ID);
int cnt = 0;
while (c.moveToNext()) {
cnt++;
Log.d("ID: ", "ID: "+ c.getInt(ixId)); // misusing the group id for the form id
menu.getItem(1).getSubMenu().addSubMenu(c.getInt(ixId), Menu.NONE, cnt, c.getString(ixDisplayName)).setIcon(R.drawable.attachment_dark);
}
} catch (Exception e) {
Log.e(TAG, "Error init form templates list.", e);
}

return true;
}

最佳答案

是的,有。

addSubMenu 方法返回 SubMenu目的。 SubMenu 也是 Menu ,因此您可以在其上调用 add 以将项目添加到子菜单而不是父菜单。您上面的代码是为 Form 1 和 Form 2 创建两个不同的子菜单,而不是在一个 New Form 子菜单中创建两个项目。

例子:

SubMenu submenu = menu.addSubMenu(0, Menu.NONE, 1, "New Form").setIcon(R.drawable.ic_new_form);
submenu.add("Form 1").setIcon(R.drawable.attachment);

关于android - 如何在代码中将子菜单项添加到 ActionBar 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com