有针对相同的功能on Blackberry提到这个bug(这已被尽可能我可以告诉关闭,但未得到解决)了几个不同的线程问题,而且,但我还没有为Android找到一个特别。是否有可能在Android中变灰(而不仅仅是禁用)MenuItem?
,我号召基于一些国家一定的MenuItems setEnabled(false)
,但它们在视觉上看起来是一样的。我希望它们以某种方式偏移,以便用户知道该选项目前不可用 - 是否有任何方法可以做到这一点?
有针对相同的功能on Blackberry提到这个bug(这已被尽可能我可以告诉关闭,但未得到解决)了几个不同的线程问题,而且,但我还没有为Android找到一个特别。是否有可能在Android中变灰(而不仅仅是禁用)MenuItem?
,我号召基于一些国家一定的MenuItems setEnabled(false)
,但它们在视觉上看起来是一样的。我希望它们以某种方式偏移,以便用户知道该选项目前不可用 - 是否有任何方法可以做到这一点?
我有同样的问题。有得到这个工作的方式有两种:
我现在用什么来使用。改变自己的东西像这样的图标,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
看一看这个link
setEnabled
也可用于MenuItems
。
呀,我用的setEnabled,但它不会在视觉上改变它。 – 2012-03-10 04:08:58
尝试下面的代码 public boolean onCreateOptionsMenu(Menu menu){ \t \t menu.add(0,1,1,“Test”)。setEnabled(false); \t \t return super.onCreateOptionsMenu(menu); \t} – Pavandroid 2012-03-10 04:29:43
这对我来说工作得很好。 – Pavandroid 2012-03-10 05:34:52
上API Level < 14
setEnabled(false)
工作正常,但在14
项目仍然点击。
在所有的Android版本,最简单的方式来使用它来显示一个菜单操作图标为禁用,并使其功能被禁用,以及:
@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文件。你只需创建一个你想在你的菜单项使用的图标选择,那么你可以更改位图的色彩,字母或两个:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/enabled_color"
android:alpha="@integer/enabled_alpha"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/ic_menu_item"
android:tint="@color/disabled_color"
android:alpha="@integer/disabled_alpha"/>
</item>
</selector>
作为一个侧面说明;我喜欢将颜色设置为启用状态为"?android:attr/textColorPrimary"
,禁用状态为"?android:attr/textColorHint"
。这样它将根据所使用的主题进行调整。
然后,你可以设置图标在菜单的xml文件来选择资源:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_action"
android:orderInCategory="0"
android:title="@string/title_menu_action"
android:icon="@drawable/ic_menu_item_selector"
app:showAsAction="ifRoom"/>
</menu>
然后当你调用item.setEnabled(enabled)
颜色和/或图标的阿尔法将随而变化州!
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemBackground="@color/white"
android:background="@color/white"
app:itemTextColor="@color/menu_text_color"
app:itemIconTint="@color/menu_text_color"
app:menu="@menu/main_drawer" />
和“@color:
此解决方案仅适用于Android 5.0+(API 21+)棒棒糖及更高版本,因此setColorFilter在早期版本中是必需的。 – straya 2016-08-19 04:59:28
我做到了,是在NavigationView使用“itemIconTint”的方式,也可以通过使用“itemTextColor”
这是Navigationview变灰文本/ menu_text_color”是一个选择:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/primaryColor" />
<item android:state_enabled="false" android:color="@color/disabled_text_color" />
<item android:color="@color/primaryText" />
</selector>
最后,如果你想禁用菜单项,
MenuItem item = mNavigationView.getMenu().findItem(R.id.your_menu_item);
item.setEnabled(isEnable);
完成!
这里有一个简单的方法来做到这一点(使用科特林):
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)
}
接受并删除了我自己的答案。 – 2012-06-04 22:34:25
这是否实际上改变了菜单项文本/标题的颜色?也就是说,它会变成灰色吗?从我的理解,这只会影响图标。如果你没有图标,只有文字会怎么样? – 2012-11-07 02:25:38
调用item.setEnabled()已经使文本变灰。问题是,在操作栏上文本变灰,但图标不是 - 此代码灰色。 – 2012-11-07 06:57:25