In the article titled “Adding Action items and Overflow menu items to Action Bar in Android“, we have seen how to add action items and split action bar items to action bar in Android.
Since action bar is introduced in Android 3.0 ( API Level 11 ) , we can not run that application in Android versions prior to Honeycomb.
In order to overcome this limitation, we can make use ActionBarCompat library available with Android support library revision 18. Using ActionBarCompat library we can implement action bars back upto Android API Level 7.
In this article, we will develop an Android application that contain action items and split action bar.
This application is developed in Eclipse 4.2.0 with ADT plugin 22.0.4.
1. Create new Android application
Application Name : ActionBarCompatMenu
Project Name : ActionBarCompatMenu
Package Name : in.wptrafficanalyzer.actionbarcompatmenu
Minimum Required SDK : API 8 : Android 2.2 ( Froyo )
Target SDK : API 17 : Android 4.2 ( Jelly Bean )
2. Setup ActionBarCompat library in Eclipse
Please refer the article titled “Android – Setting up ActionBarCompat support library in Eclipse”
3. Add reference to ActionBarCompat support library
4. Add menu icons to this project
From the given below links, download the files drawable-mdpi.zip, drawable-hdpi.zip and drawable-xhdpi.zip and extract to the folders drawable-mdpi, drawable-hdpi and drawable-xhdpi respectively



<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ActionBarCompatMenu</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="phone">Phone</string> <string name="computer">Computer</string> <string name="gamepad">Gamepad</string> <string name="camera">Camera</string> <string name="video">Video</string> <string name="email">EMail</string> </resources>
6. Update the menu file res/menu/main.xml
Note : Please see the namespace prefix “myapp” in the given below code
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/phone" android:title="@string/phone" android:icon="@drawable/phone" myapp:showAsAction="ifRoom|withText" /> <item android:id="@+id/computer" android:title="@string/computer" android:icon="@drawable/computer" myapp:showAsAction="ifRoom|withText" /> <item android:id="@+id/gamepad" android:title="@string/gamepad" android:icon="@drawable/gamepad" myapp:showAsAction="ifRoom|withText" /> <item android:id="@+id/camera" android:title="@string/camera" android:icon="@drawable/camera" myapp:showAsAction="ifRoom|withText" /> <item android:id="@+id/video" android:title="@string/video" android:icon="@drawable/video" myapp:showAsAction="ifRoom|withText" /> <item android:id="@+id/email" android:title="@string/email" android:icon="@drawable/email" myapp:showAsAction="ifRoom|withText" /> </menu>
7. Update the file res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/hello_world" /> </RelativeLayout>
8. Update the class MainActivity in the file src/in/wptrafficanalyzer/actionbarcompatmenu/MainActivity.java
package in.wptrafficanalyzer.actionbarcompatmenu; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch(item.getItemId()){ case R.id.phone: Toast.makeText(getBaseContext(), "You selected Phone", Toast.LENGTH_SHORT).show(); break; case R.id.computer: Toast.makeText(getBaseContext(), "You selected Computer", Toast.LENGTH_SHORT).show(); break; case R.id.gamepad: Toast.makeText(getBaseContext(), "You selected Gamepad", Toast.LENGTH_SHORT).show(); break; case R.id.camera: Toast.makeText(getBaseContext(), "You selected Camera", Toast.LENGTH_SHORT).show(); break; case R.id.video: Toast.makeText(getBaseContext(), "You selected Video", Toast.LENGTH_SHORT).show(); break; case R.id.email: Toast.makeText(getBaseContext(), "You selected EMail", Toast.LENGTH_SHORT).show(); break; } return true; } }
9. Update the file AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.wptrafficanalyzer.actionbarcompatmenu" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.AppCompat" > <activity android:name="in.wptrafficanalyzer.actionbarcompatmenu.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
10. Screenshot of the application in execution
11. Showing split action bar in Pre Android API Level 11 versions
If there is not enough room for action menus to align in action bar, then we can move the action menus to the bottom of the screen.
This is achieved by specifing uiOptions attribute for the activity in AndroidManifest.xml.
Please see the highlighted text, that splits the actionbar in the given below code.
The attribute “uiOptions” specified in the line 19 is understood only by API Level 14 or higher.
The meta-data element specified in the lines 24 and 25 is used for older versions.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.wptrafficanalyzer.actionbarcompatmenu" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.AppCompat" > <activity android:name="in.wptrafficanalyzer.actionbarcompatmenu.MainActivity" android:label="@string/app_name" android:uiOptions="splitActionBarWhenNarrow" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" /> </activity> </application> </manifest>
12. Screenshot of the application with Split Action Bar
13. Download Full Source Code


I am George Mathew, working as software architect and Android app developer at wptrafficanalyzer.in
You can hire me on hourly basis or on project basis for Android applications development.
For hiring me, please mail your requirements to info@wptrafficanalyzer.in.
My other blogs
store4js.blogspot.com
Thank you very much for this article!
Been searching for days on showing menu items on action bar and not on overflow menu alone.
Hi Mathew
how put drawer menu and bottom menu in the same time ?
I tried put your example with NavigationDrawerAppCompat(from support4 samples) and I called them inside onCreateOptionsMenu(Menu menu), but didn’t work…
Hi
for this same
i want to implement actionbar with sliding menu using navigation
can u please help me
How can i use custom icons and layout in action bar compat
when i applied this code on my application the menu bar show on top not in bottom how to resolve it ..???