ActionBar(12)用反射法-让溢出菜单里的item显示图标

来源:互联网 发布:象棋软件官网 编辑:程序博客网 时间:2024/05/29 04:54

通常,在溢出菜单中的显示是只有文字,如下图:

 

现在我们想要显示为下图中的样式,既有图标又有文字:

 

 

1.首先我们来看一下android源码,MenuBuilder.java

是否显示这个值是由MenuBuilder的变量值mOptionalIconsVisible决定的。该值默认是false的。

[java] view plaincopy
  1. <pre class="java" name="code">         
[java] view plaincopy
  1. private boolean mOptionalIconsVisible = false;  
[java] view plaincopy
  1. void setOptionalIconsVisible(boolean visible) {  
  2.            mOptionalIconsVisible = visible;  
  3.        }  
[java] view plaincopy
  1.   
[java] view plaincopy
  1. boolean getOptionalIconsVisible() {  
  2.            return mOptionalIconsVisible;  
  3.        }  
  4.      

2.由于MenuBuilder.java是系统的内部框架类,我们需要通过反射的方法将该值mOptionalIconsVisible 设为true,即显示出icon图片。

[java] view plaincopy
  1. @Override  
  2. public boolean onCreateOptionsMenu(Menu menu) {  
  3.     // TODO Auto-generated method stub  
  4.     MenuInflater mMenuInflater = new MenuInflater(this);  
  5.     mMenuInflater.inflate(R.menu.simrecord_menu, menu);  
  6.   
  7.     setIconVisable(menu,true);  
  8.       
  9.     return true;  
  10. }  
[java] view plaincopy
  1. public void setIconVisible(Menu menu, boolean visable){  
  2.         Field field;  
  3.         try {  
  4.             field = menu.getClass().getDeclaredField("mOptionalIconsVisible");  
  5.               
  6.             Log.d(TAG," setIconVisible1() field="+field);  
  7.             field.setAccessible(true);  
  8.             field.set(menu, visable);  
  9.         } catch (NoSuchFieldException e) {  
  10.             // TODO Auto-generated catch block  
  11.             e.printStackTrace();  
  12.         } catch (IllegalAccessException e) {  
  13.             // TODO Auto-generated catch block  
  14.             e.printStackTrace();  
  15.         } catch (IllegalArgumentException e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         }  
  19.       
  20.           
  21.     }  

在反射中,getDeclaredField()获取MenuBuilder.java中的属性值mOptionalIconsVisible。

通过field.set(menu, visable);设置该值为true。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车停小区被砸了怎么办 车停在小区被砸怎么办 地板拖过有腥味怎么办 网联成立支付宝怎么办 微信号站街不了怎么办 苹果照片全没了怎么办 没给员工交社保怎么办 淘宝图片超过3m怎么办 亚马逊被跟卖了怎么办 刚开饭店没生意怎么办 趣店诈骗注册了怎么办 乐动力步数不准怎么办 乐动力计步为零怎么办 净网大师ios下架怎么办 探探手机号换了怎么办 大象册被和谐后怎么办 试客联盟不退款怎么办 比邻号被禁用了怎么办 被手机分期骗了怎么办 分期乐登录不上怎么办 拼多多绑定微信怎么办 狗吃了鸭骨头怎么办 在趣购上当了怎么办 加不了别人微信怎么办 微信号加不上人怎么办 微信无法加好友怎么办 失眠的时候怎么办才好 贵宾狗不吃饭该怎么办 玩时时彩输钱了怎么办 白色衣物被染色了怎么办 白衬衣漂白变黄怎么办 白衬衣被染红了怎么办 染色了的白衣服怎么办 洗白衣服染色了怎么办 白衣服染上色了怎么办 白色衣服被染色了怎么办 白色的衣服被染色了怎么办 被毒蜜蜂咬了怎么办 被黑黄蜂咬了怎么办 专业限选课挂科怎么办 吉大限选课挂科怎么办