Android:改变选项菜单项的可绘制状态似乎有副作用

时间:2011-01-02 13:42:08

标签: android menuitem drawable options-menu

在我的onCreateOptionsMenu()中,我基本上有以下内容:

public boolean onCreateOptionsMenu(Menu menu) {

        menu.add(Menu.NONE, MENU_ITEM_INSERT, Menu.NONE, R.string.item_menu_insert).setShortcut('3',
                'a').setIcon(android.R.drawable.ic_menu_add);

        PackageManager pm = getPackageManager();
        if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) && pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)){
            menu.add(Menu.NONE, MENU_ITEM_SCAN_ADD, Menu.NONE, ((Collectionista.DEBUG)?"DEBUG Scan and add item":getString(R.string.item_menu_scan_add))).setShortcut('4',
                    'a').setIcon(android.R.drawable.ic_menu_add);
        }
        ...
}

在onPrepareOptionsMenu以及其他方面:

final boolean scanAvailable = ScanIntent.isInstalled(this);
final MusicCDItemScanAddTask task = new MusicCDItemScanAddTask(this);          
menu.findItem(MENU_ITEM_SCAN_ADD).setEnabled(scanAvailable && (tasks == null || !existsTask(task)));

如您所见,两个选项具有相同的可绘制集(android.R.drawable.ic_menu_add)。现在,如果在onPrepareOptionsMenu中第二个菜单项被禁用,其标签和图标将变为灰色,但第一个菜单项的图标变为灰色,而第一个菜单项的标签保持黑色并保持可点击状态。是什么导致两个图标/绘图之间的这种串扰?在这种情况下,系统不应该处理像mutate()这样的东西吗?

我附上了截图:

top menu item icon should not be gray

3 个答案:

答案 0 :(得分:3)

http://www.curious-creature.org/2009/05/02/drawable-mutations/

Romain Guy的上述文章解释了这种情况并提供了解决方法。

答案 1 :(得分:1)

是的,这看起来很奇怪。我无法解释为什么会这样,但是我可以提出一个解决方法 - 而不是使用内部可绘制的资源,你可以将相同的图像放在你的app drawable resourse目录中,你可以复制add图像,所以您有2张图片 - add_for_menu_item_1.pngadd_for_menu_item_2.png的名称不同,但具有相同的视觉效果。我相信这会成功。

答案 2 :(得分:0)

这两个菜单项是否共享同一个alphaChar导致第二个menuItem被禁用?