(伪优化)解决菜单(Menu)添加Icon无效问题/Android

来源:互联网 发布:mac文字游戏制作软件 编辑:程序博客网 时间:2024/06/05 14:29

在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

阅读全文
0 0
原创粉丝点击