笔者最近在进行menu编程时,发现MenuItem的setIntent方法不起作用,即点击绑定了intent的MenuItem后没反应,界面并未跳转至另一个activity。在网上查询后有人说是因为重写了onOptionsItemSelected方法,于是笔者就将onOptionsItemSelected的方法屏蔽,然后奇迹出现了。
笔者遇到的另一个问题就是SubMenu的setIcon方法不起作用,调用SubMenu的setIcon方法后图标并未显示。上网查询后有人说是Android版本问题,低版本的可以直接使用setIcon方法,而高版本对涉及到菜单的源码类MenuBuilder做了修改,默认不显示图标。要想解决这个问题就需要创建MenuBuilder对象并调用其方法,但是MenuBuilder是系统内部的框架类,在应用程序中无法直接创建MenuBuilder对象。因此需要利用反射机制来调用MenuBuilder类的setOptionalIconsVisible方法。
反射需要用的类名为:com.android.internal.view.menu.MenuBuilder;
方法名为:setOptionalIconsVisible,该方法的参数为boolean类型。
笔者遇到的第三个问题是setHeaderTitle和setHeaderIcon不起作用,调用SubMenu的这两个方法,即看不到菜单头的标题,也看不到菜单头的图标,问题直到现在也没能解决,贴出代码希望有大神不吝赐教。
以下是onCreateOptionsMenu方法中的代码:
//向menu中添加字体颜色的子菜单
SubMenu colorMenu =
menu.addSubMenu("字体颜色");
colorMenu.setIcon(R.drawable.xxx);
colorMenu.setHeaderTitle("请选择文字颜色");
colorMenu.setHeaderIcon(R.drawable.yyy);
colorMenu.add(0, COLOR_1, 0,
"红色");
colorMenu.add(0, COLOR_2, 0, "蓝色");
colorMenu.add(0, COLOR_3, 0, "黄色");
运行程序后“字体颜色”和图标xxx可以显示,但是点击字体颜色菜单项后弹出的只有红色、蓝色和黄色菜单项,“请选择文字颜色”和图标yyy并未显示。问题一直未解决,期待高手指点。