Get options menu to show in system bar - java

I'm trying to get my options menu to show up in the new Android 3.0 system bar. I can get this behavior to work with the Notepadv3 tutorial. However, when implementing nearly the identical functions, the menu shows in the above action bar, but not the system bar. Any ideas?
Attached is the appropriate code for my application:
public class AACUser extends Activity {
private static final int ADMIN_ID = Menu.FIRST;
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, ADMIN_ID, 0, R.string.menu_admin);
return true;
}
#Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()) {
case ADMIN_ID:
enterAdminMode();
return true;
default:
return super.onMenuItemSelected(featureId, item);
}
}
}
I've also tried implementing these menu functions as recomended by the creating menu documentation:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.user_menu, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_adminMode:
enterAdminMode();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
but no difference: it still displays the option in the overflow of the action bar, but not the system bar.

As of Android 3.0, the options menu is not required (if not deprecated). If you target API 11 (Android 3.0) or later, it is assumed that your app will work without an options menu, so the system bar will not display one. The options menu in the system bar is only there for backwards compatibility with old applications. New applications should have another affordance for accessing options, such as that provided by the action bar.

I think that the menu button in the system bar is for backward compatibility purposes only. So if you want to design your app for Honeycomb then the menu should be and will be in the action bar.

Related

Why Can't I Call setAlpha on Icon in MenuItem

I have been stuck trying to simply change the transparency of this MenuItem icon for hours... I'm not sure what else to do. I am able to successfully call setEnable() on the icon, which means the problem is not accessing it. It must have something to do with the icon itself. I am using the standard Material theme that comes with the "Basic Activity Template", would a style or theme even prevent me from programmatically changing it? I am calling onPrepareOptionsMenu from a fragment, could that be the issue? Here is my code:
#Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// top menu (action bar)
inflater.inflate(R.menu.menu_searches, menu);
// bottom menu (the one I am having an issue with)
Menu bottomMenu = toolbarBottom.getMenu();
// the MenuItem I am trying to call "setAlpha()" on
deleteMenuItem = bottomMenu.findItem(R.id.action_delete);
for (int itemIndex = 0; itemIndex < bottomMenu.size(); itemIndex++) {
bottomMenu.getItem(itemIndex).setOnMenuItemClickListener(new
MenuItem.OnMenuItemClickListener() {
#Override
public boolean onMenuItemClick(MenuItem item) {
return onOptionsItemSelected(item);
}
});
}
}
#Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if (itemsChecked > 0) {
deleteMenuItem.setEnabled(true);
/* I have also tried "delete.getIcon().mutate().setAlpha(255);" -
- but I do not have another instance of the icon so I don't think I need to -
- call "mutate()". It didn't work anyways */
deleteMenuItem.getIcon().setAlpha(255);
} else {
deleteMenuItem.setEnabled(false);
deleteMenuItem.getIcon().setAlpha(5);
}
}
menu.findItem() is laggy and calling it within onPrepareOptionsMenu(Menu menu) produces bad user experience. It's better to get MenuItem object once while creating menu, and then just call setAlpha each time menu occures on screen. You can try
MenuItem mDynamicMenuItem;
#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);
// Get dynamic menu item
mDynamicMenuItem = menu.findItem(R.id.menu_item);
return true;
}
#Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// Here is just a good place to update item
MenuItem delete = mDynamicMenuItem.findItem(R.id.action_delete);
if (itemsChecked > 0) {
delete.setEnabled(true);
delete.getIcon().setAlpha(255);
} else {
delete.setEnabled(false);
delete.getIcon().mutate().setAlpha(5);
delete.getIcon().setAlpha(5);
}
return true;
}

How to Disable or Enable Action Bar Sub Menu Items on other Activity in Android

I am making a app after Login my Login submenu item should be disable until the person is logout, after logout, Login item should be enable again!!!
My main activity contains a Action bar is it possible to enable or
disable my code in Login Activity?
i have tried a code but didn't achieve any response on the basis of getstatus item should be disable !!
Login Activity Code
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
if (getstatus==1) {
removeSomeItems(menu);
Toast.makeText(getApplication(),"logout called",Toast.LENGTH_SHORT).show();
return true;
}
else
{
return false;
}
}
protected void removeSomeItems(Menu menu){
MenuItem Overflow = menu.findItem(R.id.action_login);
Overflow.setVisible(false); // I want this item to be available eventually
menu.removeItem(R.id.action_logout); // I want this item to be unavailable for this activity
}
Can any one suggest me proper way to achieve this scenario ?

Open or inflate the Actionbar menu on longclick only - Android

I'm trying to make the actionbar menu (onCreateOptionsMenu) open ONLY on a long-click. How would I achieve this? At the moment I have it working for just a single short press/click using the following code:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// TODO: Only onlongclick should the menu be revealed
getMenuInflater().inflate(R.menu.my_menu_id, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_home:
open_home();
return true;
case R.id.menu_how_to:
open_how_to();
return true;
case R.id.menu_rate:
open_rate();
return true;
case R.id.menu_about:
open_about();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
I'd like the menu to ONLY open for a long click (sort of like a hidden/trick feature). I've looked into onLongClickListener but can't get it to work. Thanks for your help! Really appreciate it.
I ended up figuring this one out myself. There's 2 ways of doing it. Either a context menu or a alert dialog menu. The alert dialog menu allow icons whereas the context menu does not.
See my answer here:
Open Actionbar Menu on Longclick - Android

Change Android Action Bar Menu Item's Icon on Click

I'm using sherlock action bar.
I have 2 items on the action bar. When the item is chosen (active), I want to change the icon's image.
This is my code on Java
#Override
public boolean onPrepareOptionsMenu (Menu menu){
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menutes, menu);
todaySched=menu.findItem(R.id.todaySched);
if(todaySched.isEnabled()){
todaySched.setIcon(R.drawable.calendarselected);
}
return true;
}
but when I do this the icon become double, and the icon won't change neither.
Can someone help?
Use the on onOptionsItemSelected method
#Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.todaySched:
// put your code here to change the icon
return true;
default:
return super.onOptionsItemSelected(item);
}
}
you may need to include the correct namespace for the ActionBar Sherlock library to ensure it Overrides the correct menu item. So the start of the method will look like this:
#Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item)

Menu not working

Working with a Xoom Tablet and the menu(options) button on the bottom of the screen does not light up (is not active).
Any suggestions?
#Override
public boolean onCreateOptionsMenu (Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.about:
about();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void about() {
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("About");
alertDialog.setMessage("App v1.0");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// here you can add functions
}
});
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
The menu key shown on the system bar in Android 3.0+ is a compatibility feature for running older apps. Setting targetSdkVersion="10" means you are not developing an app that targets Android 3.0+ and the system will adjust compatibility behavior for your app accordingly.
If you are truly writing an app to run on Android 3.0+ tablets you will not have a menu key on the system bar. Forget about it. Put it out of your mind. :) Abusing compatibility features in this way explicitly breaks Android UI design guidelines. The action bar will present your activity's options menu if present. If you do not have an action bar in your activity you should present options using some other on-screen affordance.
I figured it out..
My target and min Sdk was:
android:targetSdkVersion="11"
android:minSdkVersion="11"
Changed to:
android:targetSdkVersion="11"
android:minSdkVersion="10"
Menu button doesn't work on 11 and up.

Categories