带有“ActionBarActivity”的android.support.v7没有菜单显示

在新的更新中,Google发布了一个新的API支持库,支持API级别7+的ActionBar。

我使用了ActionBarSherlock直到这个更新,我写了代码来加载菜单:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.activity_main, menu); return true; } 

和菜单文件:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" android:title="@string/ok" android:showAsAction="always"></item> <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" android:title="@string/cancel" android:showAsAction="always"></item> </menu> 

在操作栏上设置菜单button。 此代码与ActionBarSherlock完美协同工作。 但是,当我将操作栏更改为新的支持库时,button不会显示在操作栏中。 即使它们被设置为android:showAsAction="always" 。 而当我debugging的代码,functionmenu.getSize()返回2,这是正确的,但没有button显示..

为什么新的支持库中没有显示button?

尝试按设备或模拟器上的MENUbutton,看看它们是否出现在溢出中。

如果他们这样做,那么问题是你的<menu> XML需要改变。 与ActionBarSherlock和本地API级别11+操作栏一起使用的菜单XML将不适用于AppCompat操作栏backport。

你的菜单XML需要如下所示:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" android:title="@string/ok" yourapp:showAsAction="always"></item> <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" android:title="@string/cancel" yourapp:showAsAction="always"></item> </menu> 

而且你需要使用相同的yourapp前缀来处理与action栏相关的任何事情(例如, yourapp:actionLayout )。

您可以在操作栏文档中看到这一点。

我想补充一点答案。

如果你想看到文本和图标 ,请在showAsAction使用withText ,我刚刚testing过; 当我always使用或ifRoom没有与withText ,我只看到一个图标。