记录一个开发过程中的问题,在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);
}
本质上都是通过反射拿图标噢,下次不要忘记了
欢迎指正。
网友评论