是否有可能变灰(而不仅仅是禁用)Android中的MenuItem?
在Blackberry上有同样的function,有几个不同的线程提到了这个bug (从我的分析结果来看 ,这个bug已经被解决了),但是我还没有find一个专门针对Android的bug 。
我打电话setEnabled(false)
在某些MenuItems基于某些状态,但他们在外观上看起来是一样的。 我想他们以某种方式抵消,以便用户知道目前的选项不可用 – 有什么办法可以做到这一点?
我遇到过同样的问题。 有两种方法可以使其工作:
- 把你的图标放在一个StateList中,以便在禁用时使用不同的图标
-
我现在用什么 在
onPrepareOptionsMenu()
中用像这样的东西来改变图标:public boolean onPrepareOptionsMenu(Menu menu) { boolean menusEnabled = reachedEndOfSlidehow(); // enable or disable? MenuItem item = menu.findItem(R.id.menu_next_slide); Drawable resIcon = getResources().getDrawable(R.drawable.ic_next_slide); if (!menusEnabled) resIcon.mutate().setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN); item.setEnabled(menusEnabled); // any text will be automatically disabled item.setIcon(resIcon); }
你可以调用invalidateOptionsMenu()
(或者从ABS, supportInvalidateOptionsMenu()
)来重建菜单。
编辑 :更新解决方案2
来源: https : //groups.google.com/forum/?fromgroups#!topic / actionbarsherlock / Z8Ic8djq-3o
在所有的Android版本上,使用这个最简单的方法来显示菜单操作图标为禁用,并使其function被禁用:
@Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.menu_my_item); if (myItemShouldBeEnabled) { item.setEnabled(true); item.getIcon().setAlpha(255); } else { // disabled item.setEnabled(false); item.getIcon().setAlpha(130); } }
我发现了一个新的方法来解决这个问题,使用可绘制的选择器XML文件。 您只需在菜单项中使用您想要使用的图标创建一个选择器,然后就可以更改色调,alpha或两者的位图:
-
-
作为一个附注; 我喜欢将颜色设置为"?android:attr/textColorPrimary"
为启用状态, "?android:attr/textColorHint"
为禁用状态。 这样它将根据使用的主题进行调整。
然后,您可以将菜单xml文件中的图标设置为选择器资源:
那么当你调用item.setEnabled(enabled)
时,图标的颜色和/或alpha将随着状态而改变!
setEnabled(false)
在API Level < 14
上工作正常,但在14
该项仍然可点击。
看看这个链接
setEnabled
也可以用于MenuItems
。
我做的方法是通过在NavigationView中使用“itemIconTint”,你也可以通过使用“itemTextColor”
这是Navigationview:
和“@ color / menu_text_color”是一个选择器:
最后,如果你想禁用一个菜单项,
MenuItem item = mNavigationView.getMenu().findItem(R.id.your_menu_item); item.setEnabled(isEnable);
完成!
这是一个简单的方法(使用Kotlin):
fun changeMenuItemColour(enabled: Boolean) { var menuItem = SpannableString(mCustomToolbar?.menu?.findItem(R.id.some_menu_item)?.title) var style = activity?.resources?.getColor(R.color.darkGraphite)!! if (enabled) style = activity?.resources?.getColor(R.color.black)!! menuItem.setSpan(ForegroundColorSpan(style), 0, menuItem.length, 0) }