开发问题记录随笔之在Fragment中和在Activity中设置

2021-03-27  本文已影响0人  打工崽

记录一个开发过程中的问题,在Ac和Fm中menu的下拉菜单有时icon会不可见,下面记录一下解决的方式

Ac中

//设置右上角menu菜单中的图标可见
    @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);
    }

Fm中

//fragment中设置menu的icon可显示
    private void setIconsVisible(Menu menu, boolean flag) {
        //判断menu是否为空
        if (menu != null) {
            try {
                //如果不为空,就反射拿到menu的setOptionalIconsVisible方法
                Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                //暴力访问该方法
                method.setAccessible(true);
                //调用该方法显示icon
                method.invoke(menu, flag);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

//在这个方法里调用setIconVisible()
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.clear();
        inflater.inflate(R.menu.event_fragment_menu, menu);
        setIconsVisible(menu,true);
        super.onCreateOptionsMenu(menu, inflater);
    }

本质上都是通过反射拿图标噢,下次不要忘记了


欢迎指正。

上一篇下一篇

猜你喜欢

热点阅读