android4.0以后的系统,按menu键显示的菜单中无icon的解决方法

先来看效果图




在android4.0之后你会发现menu.setIcon(**);之后,menu中依然无法显示图标。
查看源码发现在ListMenuItemView这个类中有如下判断:
public void setIcon(Drawable icon) {
        final boolean showIcon = mItemData.shouldShowIcon() || mForceShowIcon;
        if (!showIcon && !mPreserveIconSpacing) {
            return;
        }
        
        if (mIconView == null && icon == null && !mPreserveIconSpacing) {
            return;
        }
        
        if (mIconView == null) {
            insertIconView();
        }
        
        if (icon != null || mPreserveIconSpacing) {
            mIconView.setImageDrawable(showIcon ? icon : null);

            if (mIconView.getVisibility() != VISIBLE) {
                mIconView.setVisibility(VISIBLE);
            }
        } else {
            mIconView.setVisibility(GONE);
        }
    }



当showIcon为false时直接return了,是不显示icon的,也就是说我们只要让
mItemData.shouldShowIcon()为true即可,

shouldShowIcon()方法实际调用的是MenuBuilder中的
boolean getOptionalIconsVisible() {
        return mOptionalIconsVisible;
}

在MenuBuilder中mOptionalIconsVisible这个属性提供了set方法,但此方法从始至终没有被调用过,导致mOptionalIconsVisible的值一直为false,所以是不显示icon的。

由于MenuBuilder处于com.android.internal包中,是无法直接调用的,
因此,我们在创建menu时只要通过反射机制调用MenuBuilder对象的setOptionalIconsVisible(true)即可显示icon了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IconSpacing.exe v1.0 程序说明 迅捷图标间距设置程序v1.0 - [email protected] 20180812 (1)、程序用途:快捷设置Windows桌面图标间距 WinXP、Win7用户可在系统提供的高级外观设置里修改桌面图标间距,但是,Win8、Win10系统却没有提供这一功能。熟悉系统的用户虽然可以通过修改注册表、bat、vbs等方式调整桌面图标间距,但这些方法都需要注销后重新登录、或重启计算机才能生效。 该程序 IconSpacing.exe 便是快捷设置Windows桌面图标间距的小程序,文名为“迅捷图标间距设置程序”。该程序提供窗口界面、命令行两种使用方式。窗口界面简洁快捷、一目了然,普通用户也可轻松使用,并且,设置后无需注销或重启便可立即生效;命令行方式可用于WinPE等需要自动设置桌面图标间距的情况。 (2)、使用环境 该程序采用VS2017 WTL10 x86编译(Windows Template Library,http://wtl.sourceforge.net/ ),程序短小精悍、可独立运行,支持32位和64位的WinXp、Vista、Win7、Win8.x、Win10及相应Windows Server版等操作系统。 (3)、窗口界面快捷设置桌面图标间距 在Windows直接运行 IconSpacing.exe 便可启动窗口界面,启动后会显示桌面图标间距的当前值,设置对话框简洁快捷、一目了然,普通用户也可快速方便地设置桌面图标间距,并且可以立即生效。 (4)、命令行方式设置桌面图标间距 在WinPE等需要自动设置桌面图标间距的时候,可以使用命令行方式。用户可按以下格式的参数启动程序,所有参数都不分大小写。更改桌面图标间距后程序将立即刷新桌面,除非添加了 -N 参数。[]加方括号的为可选参数,()加圆括号的为可选独立参数(只能单独使用),(无参)是不带任何参数。 [-Hxxx] :将桌面图标水平间距设置为xxx,xxx是0到150之间的3位正整数(Win7风格度量单位)。只带该参数而不带[-Vxxx]参数时,便只修改桌面图标的水平间距; [-Vxxx] :将桌面图标垂直间距设置为xxx,xxx是0到150之间的3位正整数(Win7风格度量单位)。只带该参数而不带[-Hxxx]参数时,便只修改桌面图标的垂直间距; [-N] :更改桌面图标间距后,不立即刷新桌面。需要重新登录、或重启计算机才能生效; (-R) :不改变桌面图标间距,只刷新桌面; (-?) :显示设置对话框和此帮助信息(当前选项卡),可显示桌面图标间距的当前值; (无参) :显示设置对话框(当前选项卡)和此帮助信息,可示桌面图标间距的当前值。 (5)、程序使用实例 # 将桌面图标水平间距设置为76、垂直间距设置为48,并在设置后立即刷新桌面。 IconSpacing.exe -H76 -V48 # 将桌面图标水平间距设置为80、垂直间距设置为50,设置后不立即刷新桌面。 IconSpacing.exe -V50 -H80 -N # 桌面图标的水平间距保持不变、垂直间距设置为56,并在设置后立即刷新桌面。 IconSpacing.exe -V56 # 不改变桌面图标间距,只是立即刷新桌面。 IconSpacing.exe -R # 显示设置对话框和此帮助信息(当前选项卡),获取桌面图标间距的当前值。 IconSpacing.exe -? # 显示设置对话框(当前选项卡)和此帮助信息,获取桌面图标间距的当前值。 IconSpacing.exe (6)、免责申明 用户可自行斟酌选用该程序,若转载请注明出处。对一切后果,作者不承担任何责任!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值