OptionsMenu在正常情况下,即便在menu文件中设置icon却没有作用。
以下是通过反射机制来实现菜单Icon的显示
在此方法中调用反射机制的方法
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.ziti, menu); setMenuIconEnable(menu, true); return true; }
反射机制实现Icon显示的方法(本次是用Studio做的,Eclipse可能有点区别)
private void setMenuIconEnable(Menu menu, boolean flag) { try { // 得到MenuBuilder类对应的字节码:如果不是v7包, //则类名是"com.android.internal.view.menu.MenuBuilder" Class<?> clazz = Class .forName("android.support.v7.view.menu.MenuBuilder"); // 得到MenuBuilder类中的setOptionalIconsVisible(boolean flag)方法 Method method = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class); // 设置方法的访问性 method.setAccessible(true); // 执行该方法 // menu.setOptionalIconsVisible(true); method.invoke(menu, flag); } catch (Exception e) { e.printStackTrace(); } }