Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android.support.v7 with `ActionBarActivity` no menu shows

In the new update Google has released a new API support library, that supports the ActionBar in API level 7+.

I used ActionBarSherlock until this update and I wrote the code to load the menu:

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

and the menu file:

<?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>

To set up the menu buttons on the action bar. This code worked perfectly with ActionBarSherlock. But when I changed the action bar to the new support library, the buttons are not shown in the action bar. Even if they are set as android:showAsAction="always". And when I debug the code, the function menu.getSize() return 2, and that is correct, but no buttons are shown..

Why are the buttons not shown in the new support library?

like image 310
nrofis Avatar asked Jul 26 '13 12:07

nrofis


1 Answers

Try pressing the MENU button on your device or emulator, and see if they appear in the overflow.

If they do, then the problem is that your <menu> XML needs to change. Menu XML that works with ActionBarSherlock and the native API Level 11+ action bar will not work with the AppCompat action bar backport.

Your menu XML would need to look like this:

<?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>

And you would need to use the same yourapp prefix for anything else related to the action bar (e.g., yourapp:actionLayout).

You can see this covered in the action bar documentation.

like image 177
CommonsWare Avatar answered Nov 15 '22 17:11

CommonsWare