Way*_*Lue 42 android menu menuitem
关于Blackberry上的相同功能有一个问题,并且有一些不同的线程提到了这个bug(据我所知,它已经关闭但没有解析),但我还没有找到专门用于Android的bug.
我正在setEnabled(false)基于某些状态调用某些MenuItem,但它们在视觉上看起来是一样的.我希望它们以某种方式被抵消,以便用户知道当前的选项不可用 - 有没有办法做到这一点?
Fra*_*ank 64
在所有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);
}
}
Run Code Online (Sandbox Code Playgroud)
Ole*_*ich 58
我遇到过同样的问题.有两种方法可以实现这一点:
我现在用的是什么 用以下内容更改图标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);
}
Run Code Online (Sandbox Code Playgroud)您可以调用invalidateOptionsMenu()(或从ABS supportInvalidateOptionsMenu())来重建菜单.
编辑:更新解决方案2
资料来源:https://groups.google.com/forum/?fromgroups#!topic / actionbarsherlock/Z8Ic8djq-3o
我发现了一种使用drawable选择器xml文件解决此问题的新方法.您只需创建一个带有要在菜单项中使用的图标的选择器,然后您可以更改色调,alpha或两者的位图:
<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>
Run Code Online (Sandbox Code Playgroud)
作为旁注; 我喜欢将色调设置"?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>
Run Code Online (Sandbox Code Playgroud)
然后当你调用item.setEnabled(enabled)图标的颜色和/或alpha时会随着状态而变化!
| 归档时间: |
|
| 查看次数: |
29967 次 |
| 最近记录: |