Why Can't I Call setAlpha on Icon in MenuItem - java

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;
}

Related

How to enable/disable option menu item on action bar based on server response in Android

I want to enable/disable option menu item on action bar based on server response in Android. I can disable the options menu using this code
#Override
public boolean onPrepareOptionsMenu (Menu menu) {
if (isFinalized) {
menu.getItem(1).setEnabled(false);
}
return true;
}
But my need is, I want to disable the menu item with server response key
Thanks in advance
You need to store Menu object in your Activity or Fragment whichever you use.
private Menu mMenu;
and
#Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
}
in your server response class (e.g. AsyncTask or Volley etc..), after the response access that mMenu object and update it.
menu.getItem(id).setVisible(false); // do whatever operation you want
invalidateOptionsMenu();
Try this:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
getMenuInflater().inflate(R.menu.menu_invitation_detail, menu);
if (isFinalized) {
menu.getItem(0).setVisible(false);
} else {
menu.getItem(0).setVisible(true);
}
return super.onCreateOptionsMenu(menu);
}

How to open menu from a button disabling menu key

PRINT SCREEN
I'm willing to block to the user the possibility to open the menu using menu key.
The menu must be opened only from the menu button in my application.
So I deleted this part of code:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
Now if I press the key button it happens nothing and that's what I wanted.
The problem is that if I press my menu button in app, the menu doesn't show up anymore...
So what do?
I thought to add the
getMenuInflater().inflate(R.menu.main, menu);
in my listener on the menu button but here is the error and I don't understand what to do... any advice?
Thank you!
Do it with Style templates. If SDK < Jelly Bean use style with ActionBar.
You have to add the onCreateOptionsMenu part. But override the onKeyDown event to disable the menu key. Like this:
#Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
return keyCode == KeyEvent.KEYCODE_MENU || super.onKeyDown(keyCode, event);
}
I am not sure but this should work
Define this variable in your main class (outside all subclasses) -
public class ... extends ... {
boolean menu = false;
...
}
And then whenever you click on menu button on your print screen, do the following -
#Override
public void onClick(View v){
menu = true;
openOptionMenu();
}
And in your onCreateOptionMenu, do this -
#Override
public boolean onCreateOptionsMenu(Menu menu) {
if(menu){
getMenuInflater().inflate(R.menu.main, menu);
}
menu = false;
return true;
}

How Can I set Action bar button icon by Java code

I have set the action bar button using xml, but I want to set the icon using java code because I want the icon to be changeable.
I want to set the icon in onCreateOptionsMenu().
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
you first get the item using Menu.findItem(), then call MenuItem.setIcon() to set the icon
code:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mymenu, menu);
menu.findItem(R.id.messages).setIcon(R.drawable.ic_action_email);
return true;
}
Get your menu item by index and set icon:
menu.getItem(index).setIcon(R.drawable.icon);
for ex:
#Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.mymenu, menu);
menu.getItem(index).setIcon(R.drawable.icon);
return true;
}

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)

Get options menu to show in system bar

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.

Categories