解決Android 4.0以上版本中OptionsMenu菜單不顯示ICON表徵圖的問題

來源:互聯網
上載者:User

標籤:

   在Android4.0系統中,建立菜單Menu,通過setIcon方法給菜單添加表徵圖是無效的,表徵圖沒有顯出來,2.3系統中是可以顯示出來的。這個問題的根本原因在於4.0系統中,涉及到菜單的源碼類 MenuBuilder做了改變,該類的部分源碼如下:

public class MenuBuilder implements Menu {...  private boolean mOptionalIconsVisible = false;....    void setOptionalIconsVisible(boolean visible) {        mOptionalIconsVisible = visible;    }    boolean getOptionalIconsVisible() {        return mOptionalIconsVisible;    }...}

  上面的代碼中,mOptionalIconsVisible成員初始值預設為false,這就是為什麼給菜單設定表徵圖沒有效果的原因;所以,只要我們在建立菜單時通過調用setOptionalIconsVisible方法設定mOptionalIconsVisible為true就可以了;這時候問題來了,要想調用該方法,就需要建立MenuBuilder對象,但是,我們是無法在開發的應用程式中建立MenuBuilder這個對象(MenuBuilder為系統內部的架構類)。

  這時候就需要考慮用反射了,在代碼運行建立菜單的時候通過反射調用setOptionalIconsVisible方法設定mOptionalIconsVisible為true,然後在給菜單添加Icon,這樣就可以在菜單中顯示添加的表徵圖了;

@Overridepublic boolean onCreateOptionsMenu(Menu menu){  setIconEnable(menu, true);   //調用這句實現顯示ICON  menu.add("新增記事").setIcon(R.drawable.add);  menu.add("記事列表").setIcon(R.drawable.list);  menu.add("分類管理").setIcon(R.drawable.category);  menu.add("官方網站").setIcon(R.drawable.web);  menu.add("關於").setIcon(R.drawable.about);  menu.add("退出").setIcon(R.drawable.exit);  return super.onCreateOptionsMenu(menu);}//enable為true時,菜單添加表徵圖有效,enable為false時無效。4.0系統預設無效private void setIconEnable(Menu menu, boolean enable){    try{    Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");    Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);    m.setAccessible(true);    //MenuBuilder實現Menu介面,建立菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特徵)    m.invoke(menu, enable);   } catch (Exception e){    e.printStackTrace();  }}

 

解決Android 4.0以上版本中OptionsMenu菜單不顯示ICON表徵圖的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.