在Android ICS操作栏中显示菜单项

4
我有一个针对Android 2.1的应用程序,它利用菜单按钮来显示一些选项。 我希望该菜单可以通过ICS中的操作栏溢出按钮获得,但我无法使其显示出来。
如果我将目标API更改为15,则ICS中底部栏中的旧式菜单按钮会消失,但是操作栏右上方的图标不会替换它,因此无法访问菜单。 我尝试为菜单项添加showAsAction属性,但没有效果。 我在Eclipse构建选项中明确指定了针对4.0.3的目标。
我希望在使用ICS Holo主题时可以访问该菜单,并且向后兼容老设备。 我该怎么做?
2个回答

6
通常情况下,您可以通过实现onCreateOptionsMenu(Menu menu)并在菜单的XML文件中添加android:showAsAction="ifRoom"来简单地添加这些操作项。
例如:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_save"
          android:icon="@drawable/ic_menu_save"
          android:title="@string/menu_save"
          android:showAsAction="ifRoom|withText" />
</menu>

您考虑到这一点了吗?

编辑: 以下是我之前使用的简单实现:

@Override
public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);
    createMenu(menu);
    return true;
}

private void createMenu(Menu menu){
    MenuItem mnu1 = menu.add(0, 0, 0, "Logout");
    {
        mnu1.setAlphabeticShortcut('a');
        mnu1.setIcon(R.drawable.icon);
        mnu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    }
}

是的,我已经实现了onCreateOptionsMenu,并在所有菜单项上使用showAsAction="isRoom",但是动作栏中除了应用程序的名称和图标之外什么也没有。 - olane
@IneffablePigeon:这是一个可用的示例项目:https://github.com/commonsguy/cw-android/tree/master/Menus/ActionBarBC - CommonsWare
尝试使用“ifRoom”而不是“isRoom”。 - James
糟糕,打错字了。我本来应该使用“ifRoom”的。感谢CommonsWare提供的git页面。 - olane

0

我五分钟前也遇到了这个问题。不知道现在还有没有帮助,但这是我解决它的方法:

在你的onCreate方法中添加super.setBooleanProperty("showTitle", true);

@Override
public void onCreate(Bundle savedInstanceState) {
super.setBooleanProperty("showTitle", true);
super.onCreate(savedInstanceState);
//more code...

这将强制显示操作栏,并且菜单按钮替换将出现。 我在Eclipse中针对Android 4进行目标设置。旧设备仅显示标题栏,并且当然会监听默认的菜单按钮操作。


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