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.一切搞定,上一张截图。

展开阅读全文

没有更多推荐了,返回首页