在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的。这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,其中有private boolean mOptionalIconsVisible = false;属性使得无法显示菜单图标。

但是,我们又无法在开发的应用程序中创建MenuBuilder这个对象的(因为MenuBuilder是系统内部的框架类)。

当然如果不是很需要还挺建议不用的,或者换一种方式。要是非得用而且还要非得用setIcon的方法,那就只有通过反射机制来实现了调用setOptionalIconsVisible方法设置mOptionalIconsVisible为true

  //自己编写设置菜单图标有效函数
//参数menu就是onCreateOptionsMenu(Menu menu) 中的参数menu
//所以该函数要使用在它里面 使用,并且要在你使用setIcon()之前调用。
private void setIconEnable(Menu menu, boolean enable)
{
try
{
Class<?> c = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m = c.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(true);
m.invoke(menu, enable); } catch (Exception e)
{
e.printStackTrace();
}
}

关于解决android4.0系统中菜单无法添加Icon的问题的更多相关文章

  1. 解决android4.0系统中菜单(Menu)添加Icon无效问题

    本文转载自: http://blog.csdn.net/stevenhu_223/article/details/9705173 在Android4.0系统中,创建菜单Menu,通过setIcon方法 ...

  2. Android应用图标微技巧,8.0系统中应用图标的适配

    现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了.三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米.华为.OV等国产手机厂商即将推出的 ...

  3. 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译

    作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...

  4. 如何在RedHat 7.0系统中安装mysql 5.7.22

    如何在RedHat 7.0系统中安装mysql 5.7.22 今天给大家介绍一下如何安装mysql5.7,在安装之前,首先要查看的是,你的系统中有没有已经安装过的情况.键入rpm -qa|grep m ...

  5. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  6. Linux——解决RedHat6/CentOS6系统中“弹出界面eth0:设备似乎不存在”的问题

    刚刚在自己的CentOS6系统中执行service network restart时,竟然提示: 弹出界面 eth0: 设备 似乎不存在, 初始化操作将被延迟.   [失败] 这事可真神奇.于是手动编 ...

  7. 在Winform中菜单动态添加“最近使用文件”

    最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用.网上资料有说,去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本.文主 ...

  8. 用户管理 之 在Linux系统中,批量添加用户的操作流程

    一.阅读此文件您需要掌握的基础知识: <Linux 用户(user)和用户组(group)管理概述><用户(user)和用户组(group)配置文件详解><Linux 用 ...

  9. 解决Ubuntu(linux)系统中PHP的curl函数无法使用的问题

    我之前用的Windows的服务器,未出现问题,后来把服务器重装了系统,今天在学微信公众号获取信息的时候,发现curl函数出现了问题...... 解决方法 首先连接上服务器,找到/etc/php/7.0 ...

随机推荐

  1. 桶排序-OC

    NSArray * b = @[@,@,@,@,@]; NSMutableArray *a = @[].mutableCopy; ; i<; i++) { a[i] = @; } for (NS ...

  2. c# 运行时替换某文件源代码(将XML 转换成 某个枚举并写入源文件)

    var sr = new StreamReader(Server.MapPath("~/WEB-INF/rule.config")); XmlDocument doc = new ...

  3. quartz 的job中获取到applicationContext

    第一步: 定义SchedulerFactoryBean的applicationContextSchedulerContextKey <bean name="scheduler" ...

  4. XML的特殊字符处理

    XML中共有5个特殊的字符,分别是:&<>“’.如果配置文件中的注入值包括这些特殊字符,就需要进行特别处理.有两种解决方法:其一,采用本例中的<![CDATA[ ]]> ...

  5. 开发资源列表【Worldsing分享】

      ucGUI(emWin)类: ucGui 汉字库生成(汉字库提取工具):ucGuiFont点击下载 ucGui v3.98 VC模拟工程源代码(VS2008):ucGUI3.98 VS2008 点 ...

  6. POJ1384Piggy-Bank(DP)

    POJ1384http://poj.org/problem?id=1384 最简单的完全背包问题,注意下初始化为INF就可以. #include <map> #include <se ...

  7. Js中获取frames中的元素

    var oCombo =  window.parent.frames["frmresourcetype"].document.getElementById('cmbType') ; ...

  8. 为什么 Apple 开发者网站关闭是件好事?

    作者:趋势科技 Apple 的开发者中心网站在 7 月 18 日因为安全漏洞或攻击而关闭.在他们的通知里,Apple 公司表示,这起安全事件可能导致开发商的姓名.通讯地址和电子邮件地址被盗取,虽然该公 ...

  9. 查找DOM

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. baseDao 使用spring3+hibernate3方式

    package cn.zk.pic.service.dao; import java.io.Serializable; import java.util.List; import java.util. ...