我從支持庫中使用ActionBar。我想在運行時更改一個MenuItem
的可見性。在大多數情況下,這可以正常工作,但有時,隱藏功能無法按預期工作。我正在使用以下代碼來更改公開程度:SupportActionBar沒有設置可見性,因爲我想
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean show = /* some condition */
myMenuItem.setVisible(show); // I got myMenuItem from onCreateOptionsMenu()
return superRetVal;
}
正如我所說的,這對大多數情況下工作正常。但是如果我做了FragmentTransaction然後調用invalidateOptionsMenu()
,它有時會出錯。錯誤是圖標本身被隱藏,因爲show == false
,但空間仍然被阻止(如設置View.setVisibility(View.INVISIBLE)
時)。在下面的屏幕顯示中,您可能會看到空間仍然被阻擋。我用紅色框突出顯示了未使用但被阻塞的空間。發生此錯誤後,只能通過單擊溢出菜單將其清除。在此之前,沒有MenuItem.setVisible()
會有任何影響。
這裏有什麼問題嗎?
謝謝!
編輯
項menu_to_current
引起問題:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:malaka="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/menu_to_current"
android:orderInCategory="100"
android:title="To Current"
android:icon="@drawable/ic_menu_current"
malaka:showAsAction="always"
android:visible="false"/>
<item
android:id="@+id/menu_show_buttons"
android:orderInCategory="100"
android:title="Show Buttons"
malaka:showAsAction="never"/>
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:title="Settings"
android:icon="@android:drawable/ic_menu_preferences"
malaka:showAsAction="never"/>
</menu>
EDIT2
我上仿真器API 16測試我現在另外真實設備API 10測試實設備API 18,emulator api 18.並且該錯誤僅發生在模擬器API 16上。不幸的是,我沒有真正的設備API 16可用於測試。
顯示菜單xml,我有一個猜測,但不能確定 –
我不確定這一點,但我認爲你需要使用View.GONE,因爲我知道INVISIBLE標籤只會將對象隱藏起來,用去掉的標籤從佈局中刪除對象... – GhostDerfel
@GhostDerfel'MenuItem.setVisibility()'是一個錯字,只有'MenuItem.setVisiblity(布爾可見)'方法可用。如果設置爲false,則這通常等於'View.GONE'。 – MalaKa