With my usual apology of late that I don't have much time for writing these days, if you're working with Android Honeycomb (3.2) or newer, and want to put a menu item in the ActionBar (Action Bar) for an Activity, I hope this source code will help.
To put a menu item in the Action Bar, you'll need to edit these files:
- The Java source code for your Activity (MainActivity.java in my case)
- Create a menu file (mainmenu.xml)
- Your Android manifest
For more advanced purposes you may need to edit other files, but for one basic menu item in the ActionBar, that's all you need.
The app activity: MainActivity.java
Here's the source code for my main Java Activity class. I've put some documentation in the source code.
package com.devdaily.fptrackerlite;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity
extends Activity
{
private Menu theMenu = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
theMenu = menu;
// reference to /res/menu/mainmenu.xml
new MenuInflater(getApplication()).inflate(R.menu.mainmenu, menu);
return (super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// code to handle the menu item tap
if (item.getItemId() == R.id.calc) {
Toast.makeText(this, "Got your tap", Toast.LENGTH_LONG).show();
return true;
}
// this is how you handle the home button tap (not really needed for this example)
if (item.getItemId() == android.R.id.home) {
Toast.makeText(this, "Got menu item tap", Toast.LENGTH_LONG).show();
return true;
}
return (super.onOptionsItemSelected(item));
}
}
The menu: mainmenu.xml
Next, here's what /res/menu/mainmenu.xml looks like:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/calc"
android:title="Calc"
android:orderInCategory="1"
android:showAsAction="always"/>
</menu>
That creates a menu item without an icon. If you prefer an icon, use this instead:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/close"
android:title="Calc"
android:orderInCategory="3"
android:icon="@drawable/calc"
android:showAsAction="always"/>
</menu>
For this second example you'll need a file named calc.png in /res/drawable.
Android manifest
To get the menu working in the ActionBar, I think you also have to specify a minSdkVersion ... I'm not sure of the exact version, but since I'm targeting Honeycomb (which is Android v3.2, and therefore minSdkVersion 13), I specify minSdkVersion = 13 here.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.devdaily.fptrackerlite"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="13" android:targetSdkVersion="13" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<activity
android:name=".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>
That's all you need to get a menu item going in the Android Honeycomb ActionBar, but I'll share the XML view file for my Activity here as well.
The view: main.xml
Here's what the view file for my Activity looks like. Note there are no references to the menu.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/ilfMainLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ilf_main_label"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<EditText
android:id="@+id/ilfsTextArea"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cursorVisible="true"
android:inputType="textMultiLine"
android:singleLine="false"
android:typeface="monospace"
android:gravity="top|left"
>
<requestFocus />
</EditText>
</LinearLayout>
Also, here's /res/values/strings.xml file:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">FPTrackerLite</string> <string name="ilf_main_label">Add ILFs (one per line)</string> </resources>
Summary
In summary, I think that's all you need to get a menu item displaying and working in the Action Bar of Android 3.2 and newer.

