#java #android #icons #drawable #menuitem
#java #Android #Значки #можно рисовать #menuitem
Вопрос:
Я застрял, пытаясь просто изменить прозрачность этого MenuItem
значка в течение нескольких часов… Я не уверен, что еще делать. Я могу успешно вызвать setEnable()
значок, что означает, что проблема не в доступе к нему. Это должно иметь какое-то отношение к самому значку. Я использую стандартную тему материала, которая поставляется с «Базовым шаблоном действий», может ли стиль или тема даже помешать мне программно изменить его? Я звоню onPrepareOptionsMenu
из фрагмента, может ли это быть проблемой? Вот мой код:
@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);
}
}
Ответ №1:
menu.findItem()
он отстает, и вызов его внутри onPrepareOptionsMenu(Menu menu)
приводит к плохому взаимодействию с пользователем. Лучше получить MenuItem
объект один раз при создании меню, а затем просто вызывать setAlpha
каждый раз, когда меню появляется на экране. Вы можете попробовать
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;
}
Комментарии:
1. Эй, Нонакун, спасибо за ответ, но это пока не решило мою проблему. Я спросил, что вы предложили и переместили
MenuItem.findItem()
вызов, но я все еще не могу изменить прозрачность MenuItem. Есть предложения?