Android: изменение нарисованных состояний пунктов меню параметров имеет побочные эффекты - PullRequest
1 голос
/ 02 января 2011

В моем 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 ]

3 голосов
/ 02 января 2011

http://www.curious -creature.org / 2009/05/02 / Drawable-мутации /

Приведенная выше статья Ромена Гая объясняет эту ситуацию и дает обходной путь.

1 голос
/ 02 января 2011

Да, это выглядит странно. Я не могу объяснить, почему это так, как есть, но я могу предложить обходной путь - вместо использования внутренних ресурсов, которые можно рисовать, вы можете поместить одно и то же изображение в каталог ресурсов для рисования вашего приложения И вы можете продублировать изображение add, так что у вас есть 2 изображения - add_for_menu_item_1.png и add_for_menu_item_2.png названы по-разному, но имеют одинаковое визуальное представление. Я уверен, что это бы сработало.

0 голосов
/ 02 января 2011

Может ли быть так, что оба пункта меню используют один и тот же alphaChar, который вызывает отключение второго элемента меню?

...