ruh*_*lde 40 android menu menuitem submenu
我想根据我的参数以编程方式将我的OptionsMenu中的子菜单添加到menuItem.我在android sdk中检查了"MenuItem"并且没有addSubMenu()方法!,尽管你可以找到"hasSubMenu()"和"getSubMenu".
正在考虑在onCreateOptionsMenu中这样做:
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem mi = menu.getItem(MYITEMID); // << this is defined in my XML optionsMenu
SubMenu subm = mi.addSubMenu(0,1,0,"Map 1"); // no addSubMenu() method!!!???
....
Run Code Online (Sandbox Code Playgroud)
如何在代码中的menuitem中创建子菜单?
ruh*_*lde 67
有时Android怪异真的很棒(而且有趣......).我这样解决了:
a)在XML中定义一个子菜单占位符,如下所示:
<item android:visible="true" android:id="@+id/m_area"
android:titleCondensed="Areas"
android:title="Areas"
android:icon="@drawable/restaur"
android:enabled="true">
<menu>
<item android:id="@+id/item1" android:title="Placeholder"></item>
</menu>
</item>
Run Code Online (Sandbox Code Playgroud)
b)在OnCreateOptionsMenu中获取子菜单项,清除它并添加我的子菜单项,如下所示:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mapoptions, menu);
int idx=0;
subm = menu.getItem(MYITEM_INDEX).getSubMenu(); // get my MenuItem with placeholder submenu
subm.clear(); // delete place holder
while(true)
{
anarea = m_areas.GetArea(idx); // get a new area, return null if no more areas
if(anarea == null)
break;
subm.add(0, SUBAREASID+idx, idx, anarea.GetName()); // id is idx+ my constant
++idx;
}
}
Run Code Online (Sandbox Code Playgroud)
Ein*_* H. 25
我知道这是一个老问题,但我自己也遇到过这个问题.这样做最直接的方法似乎是简单地将项目本身指定为子菜单,然后添加到此项目.例如:
menu.add(groupId, MENU_VIEW, Menu.NONE, getText(R.string.menu_view));
menu.add(groupId, MENU_EDIT, Menu.NONE, getText(R.string.menu_edit));
SubMenu sub=menu.addSubMenu(groupId, MENU_SORT, Menu.NONE, getText(R.string.menu_sort));
sub.add(groupId, MENU_SORT_BY_NAME, Menu.NONE, getText(R.string.menu_sort_by_name));
sub.add(groupId, MENU_SORT_BY_ADDRESS, Menu.NONE, getText(R.string.menu_sort_by_address));
:
:
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 19
这是一个完整的答案,它基于使用占位符的想法,但主要使用xml来添加子菜单.
如果你有一个像所谓的main_menu.xml这样的菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="My Menu"
android:id="@+id/my_menu_item">
<!-- A empty SubMenu -->
<menu></menu>
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
创建另一个将在my_menu_item中使用的菜单sub_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="SubMenu One"
android:id="@+id/submenu_one" />
<item android:title="SubMenu Two"
android:id="@+id/submenu_two" />
<item android:title="SubMenu Three"
android:id="@+id/submenu_three" />
</menu>
Run Code Online (Sandbox Code Playgroud)
在你的onCreateOptionsMenu中:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate your main_menu into the menu
getMenuInflater().inflate(R.menu.main_menu, menu);
// Find the menuItem to add your SubMenu
MenuItem myMenuItem = menu.findItem(R.id.my_menu_item);
// Inflating the sub_menu menu this way, will add its menu items
// to the empty SubMenu you created in the xml
getMenuInflater().inflate(R.menu.sub_menu, myMenuItem.getSubMenu());
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案很好,因为inflater处理大部分工作.
Phi*_*hil 17
执行此操作的最佳方法是在xml菜单文件中.您可以通过在以下内容中创建新menu
对象来执行此操作item
:
<menu>
<item>
...
<menu>
...
</menu>
...
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73355 次 |
最近记录: |