1

私の 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)));

ご覧のとおり、2 つのオプション項目に同じドローアブル セット (android.R.drawable.ic_menu_add) があります。これで、onPrepareOptionsMenu で 2 番目のメニュー項目が無効になると、そのラベルとアイコンが灰色になりますが、最初のメニュー項目のアイコンも灰色になりますが、最初のメニュー項目のラベルは黒のままで、クリック可能なままです。2 つのアイコン/ドローアブル間のクロストークの原因は何ですか? この場合、システムは mutate() のようなものを処理するべきではありませんか?

スクリーンショットを含めました:

トップ メニュー項目のアイコンはグレーであってはなりません

4

3 に答える 3

3

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

Romain Guy による上記の記事では、まさにこの状況を説明し、回避策を提供しています。

于 2011-01-02T14:32:41.913 に答える
1

はい、これは奇妙に見えます。これがそのままである理由を説明することはできませんが、回避策を提案できます-内部の描画可能なリソースを使用する代わりに、同じ画像をアプリの描画可能なリソースディレクトリに配置し、画像を複製できるaddため、2つの画像があります-名前は異なりますが、視覚的な表現は同じですadd_for_menu_item_1.pngadd_for_menu_item_2.pngこれでうまくいくと確信しています。

于 2011-01-02T14:02:33.000 に答える
0

両方のメニュー項目が同じ alphaChar を共有しているため、2 番目の menuItem が無効になっている可能性がありますか?

于 2011-01-02T14:43:29.413 に答える