2011-01-02 2 views
1

내 onCreateOptionsMenu()에는 기본적으로 다음과 같은 것들이 있습니다.Android : 옵션 메뉴 항목의 드로어 블 상태 변경시 부작용이있는 것 같습니다.

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

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

로맹 사람에 의해 위의 기사는 바로이 상황을 설명하고 주위에 작업을 제공합니다.

+0

+1 - 좋은 설명! –

+0

예 Emile, 알아요. 하지만 코드에서 드로어 블을 사용하고 mutate()를 수행해야합니다. 이 경우에는 코드에서 건드리지 않고 mutate() 부분을 수행하는 시스템을 계산합니다 (setEnabled() 호출에서). 내가 뭔가를 이해하지 못한다면. – pjv

+0

이 기사에서는 왜 시스템이 mutate를 수행하지 않는지 설명합니다. 나는. 효율성을 위해. 이것은 내가 생각하기에, 당신의 경험이 예상되는 행동이며 Arhimed가 제안한대로 자산을 복제하거나 자신의 아이콘을 변형시키는 코드를 추가해야한다는 것을 의미합니다. "... mutate() 부분을 수행하는 시스템에서의 계산"이라는 안드로이드는 단순히 그렇게하지 않을 것입니다. – Emile

1

예,이 이상한 보인다. 이것이 왜 그런지 설명 할 수는 없지만 해결 방법을 제안 할 수 있습니다. 내부 drawable resourse를 사용하는 대신 앱 drawable resourse dir에 동일한 이미지를 넣을 수 있고 add 이미지를 복제 할 수 있으므로 2 개의 이미지를 가질 수 있습니다. - add_for_menu_item_1.pngadd_for_menu_item_2.png은 다르게 이름이 지정되었지만 동일한 시각적 표현을가집니다. 이 트릭을 할 것이라고 확신합니다.

+1

나는 같은 생각을 가지고있었습니다. 당신이 그렇게해야한다는 것은 부끄러운 일입니다. 아마도 원래 게시물에서 언급했듯이 중복 자산을 피하기 위해 수동으로 mutate()를 관리 할 수 ​​있습니다. 어떻게 그렇게 할 지 확신하지 못합니다. – Emile

+0

'MenuItem'은'Drawable'을 반환하는'getIcon()'을 가지고 있습니다. 그래서'Drawable'에서 mutate를 호출 할 수 있습니다. 나는 이것이 문제를 해결할 수 있다고 생각한다. –

+0

나는 이것이 가능한 해결 방법으로 작용할 것이라는데 동의합니다. Arhimed에게 감사드립니다. 그 원인에 대한 추측은? – pjv

0

두 메뉴 항목 모두 두 번째 menuItem이 비활성화되는 동일한 alphaChar를 공유하고있을 수 있습니까?

+0

예, 있습니다. 나는 분명히 'a'를 양쪽에 대한 지름길로 할당했고 숫자로 된 단축키를 다른 것과 공유했습니다. 하지만 아직 작동하지 않습니다. 나는 아마 이것을 생각할지도 모른다. 감사. 나는 더 나은 표정을 지을 것이고 나는 다른 중첩을 찾을 수 있는지 알아볼 것이다. – pjv

+0

죄송합니다. 잘 발견되었지만 관련이 없습니다. – pjv