动态添加操作项到操作栏

4
我想出于某些原因完全动态地创建我的ActionBar中的操作菜单项。但是当我从代码添加菜单项时,它们会显示为设置菜单项的溢出。

以下是我的代码。有什么解决方案吗?

enter image description here
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.start, menu);

    MenuItem logoutMI= menu.add(0,1,0,"Logout");
    logoutMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    logoutMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    MenuItem configMI= menu.add(0,2,1,"Configuration");
    configMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    configMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;
}

在某个时候,您的操作栏会变得拥挤不堪,菜单项必须进入溢出区。您是否试图将“注销”和“配置”添加到“现金”或“菜单”旁边?如果是这样,那么“信息”和“刷新”将被放入溢出区。 - invertigo
图像中显示的菜单项是以静态方式从XML菜单文件创建的,仅用于示例截图。 - lory105
2个回答

5
我认为您需要在setShowAsAction上将这些标志值进行OR运算。 根据文档,http://developer.android.com/reference/android/view/MenuItem.html#setShowAsAction(int)

应使用SHOW_AS_ACTION_ALWAYS、SHOW_AS_ACTION_IF_ROOM或SHOW_AS_ACTION_NEVER之一,并且您可以选择性地将该值与SHOW_AS_ACTION_WITH_TEXT进行OR运算。 SHOW_AS_ACTION_WITH_TEXT

例如:
 logoutMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

请问这个解决方案是否真正解决了您的问题,请告知。

1
请查看其他菜单项的order字段,您正在添加“注销”和“配置”,并将它们的顺序设置为0,但是如果所有其他菜单项的顺序都为0,则它们将根据添加到菜单中的时间排序。
此外,您只需要调用setShowAsAction()一次,并使用或运算符:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    //getMenuInflater().inflate(R.menu.start, menu);

    MenuItem logoutMI= menu.add(0,1,0,"Logout");
    logoutMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    MenuItem configMI= menu.add(0,2,0,"Configuration");
    configMI.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接