Reputation: 4207
How do you show an options menu on Honeycomb, or an ICS tablet, without an action bar?
After some playing around, it seems there is no way to have an options menu on Honeycomb devices if there is no action bar and targetsdkversion
is >=11. Even if your theme is Theme.Holo.NoActionBar
. The only way I can see to show an options menu on Honeycomb with targetsdkversion
>=11 is with a theme that does have an action bar, and then hiding it in onCreate
.
The only way I can see to display the older panel menu on Honeycomb is with targetsdkversion
<=10.
In summary, in Honeycomb, there is no way to have an options menu if you don't have an action bar, unless you target below 11. This seems like a bug. In ICS and up you can have whatever options menus you like, regardless of if you actually have an action bar.
My original goal was to be able to use both the old style panel menu, and new Action Bar menu (in different activities) on Honeycomb and up, while using the panel menu everywhere below Honeycomb.
The reason is there is one activity where it is a requirement to have large menu buttons, however the rest of the app can be perfectly Holo-ed.
To achieve this, I have used Theme.Holo
(for api 11+) everywhere except for this one activity where I use Theme.NoTitlebar
. I have android:minSdkVersion="5" android:targetSdkVersion="14"
, so the support menu key doesn't show (and thus doesn't waste screen space on some new HTC phones). I provide my own button to pop up the panel menu if the device doesn't have a hardware menu button (via http://developer.android.com/reference/android/view/ViewConfiguration.html#hasPermanentMenuKey() )
The problem is, this didn't work on a Honeycomb tablet (Galaxy Tab, Honeycomb 3.2). The normal activities with the action bar work fine, but on the special activity nothing happens when I press the menu button (the one I've provided in the UI).
This works fine on at least 2 ICS phones and the emulator (with and without a hardware menu key). Normal action bar menus everywhere except on this one activity, where I get the large panel menu.
So what is the solution? Is this a problem with the Galaxy Tab or with Honeycomb? Is there a different theme I should be using to provide the panel menu?
Edit: I obtained an ICS tablet for more testing, and found the panel menu didn't appear there either. So the exact same app, on the same version of Android, will show a panel menu on a phone and nothing on a tablet. Huh?
Upvotes: 1
Views: 1036
Reputation: 438
Below is an extract from the PhoneWindow system class as for Honeycomb and above Android versions. It is really hardcoded check for Android target version and device screen size. Would you be able to avoid this check - the menu would be displayed normally. But there is no such possibility. That is why it is impossible to show options menu on Honeycomb+ devices with target sdk set to value above 10. It is funny, that in case action bar menu could be displayed, it will be displayed earlier and this code will never be reached. Because of this, the comment above the code looks especially derisively.
// Don't open an options panel for honeycomb apps on xlarge devices.
// (The app should be using an action bar for menu items.)
if (st.featureId == FEATURE_OPTIONS_PANEL) {
Context context = getContext();
Configuration config = context.getResources().getConfiguration();
boolean isXLarge = (config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_XLARGE;
boolean isHoneycombApp = context.getApplicationInfo().targetSdkVersion >=
android.os.Build.VERSION_CODES.HONEYCOMB;
if (isXLarge && isHoneycombApp) {
return;
}
}
Upvotes: 2