android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...

今天主要解决在Android 4.0 以上的系统中,在java代码中给菜单Menu动态添加Icon无效问题。本人通过尝试网上给出的涉及到菜单的源码类 MenuBuilder通过反射更改mOptionalIconsVisible成员初始值默认值false为true的方法,结果并不奏效,图标还是没有显示出来。最后我找到了有效的方法,虽然依旧使用的是反射,但是我们只需要重写一个onMenuOpened()方法即可。1.只需要重新这一方法/* 利用反射机制调用MenuBuilder的setOptionalIconsVisible方法设置mOptionalIconsVisible为true,给菜单设置图标时才可见

* 让菜单同时显示图标和文字

*/

@Override

public boolean onMenuOpened(int featureId, Menu menu) {

if (menu != null) {

if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {

try {

Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);

method.setAccessible(true);

method.invoke(menu, true);

} catch (Exception e) {

e.printStackTrace();

}

}

}

return super.onMenuOpened(featureId, menu);

}

2.我在Activity里面创建menu的代码,并且给menu设置点击事件@Override

public boolean onCreateOptionsMenu(Menu menu) {

//使用menu文件

//getMenuInflater().inflate(R.menu.menu_main, menu);

//动态创建menu文件

// Inflate the menu; this adds items to the action bar if it is present.

menu.add(Menu.NONE, Menu.FIRST + 1, 0, "菜单1").setIcon(R.drawable.icon_homepage);

menu.add(Menu.NONE, Menu.FIRST + 2, 0, "菜单2").setIcon(R.drawable.icon_homepage);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

super.onOptionsItemSelected(item);

switch (item.getItemId()) //得到被点击的item的itemId

{

case Menu.FIRST + 1: //对应的ID就是在add方法中所设定的Id

AppToast.makeShortToast(MainActivity.this, "Menu.FIRST+1");

break;

case Menu.FIRST + 2:

AppToast.makeShortToast(MainActivity.this, "Menu.FIRST+2");

break;

}

return true;

}3.一切搞定,上一张截图。

902b8e994d8aca9c7760ee5bc56a9f21.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值