解决菜单(Menu)添加Icon无效问题

2017/07/13 _Android

在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为系统内部的框架类);


利用反射给出的解决方案,主Activity中复写如下:   

    @Override
    protected boolean onPrepareOptionsPanel(View view, Menu menu) {
        if (menu.getClass() == MenuBuilder.class) {
            try {
                Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                method.setAccessible(true);
                method.invoke(menu, true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return super.onPrepareOptionsPanel(view, menu);
    }

   原博的解决方案太冗长了……


        参考资料:

解决android4.0系统中菜单(Menu)添加Icon无效问题——stevenhu_223

Search

    Table of Contents