通常,在溢出菜单中的显示是只有文字,如下图:
现在我们想要显示为下图中的样式,既有图标又有文字:
1.首先我们来看一下android源码,MenuBuilder.java
是否显示这个值是由MenuBuilder的变量值mOptionalIconsVisible决定的。该值默认是false的。
<pre class="java" name="code">
private boolean mOptionalIconsVisible = false;
void setOptionalIconsVisible(boolean visible) {
mOptionalIconsVisible = visible;
}
boolean getOptionalIconsVisible() {
return mOptionalIconsVisible;
}
2.由于MenuBuilder.java是系统的内部框架类,我们需要通过反射的方法将该值mOptionalIconsVisible 设为true,即显示出icon图片。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater mMenuInflater = new MenuInflater(this);
mMenuInflater.inflate(R.menu.simrecord_menu, menu);
setIconVisable(menu,true);
return true;
}
<pre class="java" name="code"> public void setIconVisible(Menu menu, boolean visable){
Field field;
try {
field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
Log.d(TAG," setIconVisible1() field="+field);
field.setAccessible(true);
field.set(menu, visable);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在反射中,getDeclaredField()获取MenuBuilder.java中的属性值mOptionalIconsVisible。
通过field.set(menu, visable);设置该值为true。