终于暂时解决了actionbar溢出菜单显示图标的问题
来源:互联网 发布:趣发现是什么软件 编辑:程序博客网 时间:2024/06/07 03:02
为什么说暂时解决了,因为只是找到了解决方法,还不确定为什么会这样,只能等以后有时间再研究。
先说下情况,采用了 AppCompat Theme,以往旧的方法都不好使,溢出菜单中的图标死活不显示,只有title,网上搜了一堆方案,给出的代码大都是如下:
@Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == Window.FEATURE_ACTION_BAR && menu != null) { if(menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch(NoSuchMethodException e) { Log.e("Menu:", "onMenuOpened", e); } catch(Exception e) { throw new RuntimeException(e); } } } return super.onMenuOpened(featureId, menu); }
后来发现原来是 点击溢出菜单时,回调方法onMenuOpened 一直不执行!
当然此时 菜单的添加方式是
通过getMenuInflater().inflate(R.menu.main, menu); 加载的,将菜单item写到menu目录下的xml文件中,通过这种方法,加载菜单的title,但是onMenuOpened 并未执行,真是奇怪。
备注:如果菜单是通过下面方式添加的,还是可以执行的,从而也能添加溢出菜单中的图标,
setIconEnable(menu, true); MenuItem item1 = menu.add(0, 1, 0, R.string.app_name); item1.setIcon(R.drawable.ofm_qrcode_icon); MenuItem item2 = menu.add(0, 1, 0, R.string.app_name); item2.setIcon(R.drawable.ofm_feedback_icon); return super.onCreateOptionsMenu(menu);
但是这样麻烦啊,菜单不能通过xml来加载。
至于为什么采用第一种方式添加菜单时,onMenuOpened 方法不执行,没找到确定原因,仅在下面页面中看到一点答复:
https://code.google.com/p/android/issues/detail?id=171440 原文回复是“The reason that onMenuOpened() and onPanelClosed() are not called is that Activity's default implementations of those methods will try and init the framework Action Bar.
We may need to another feature id for AppCompat's action bar.”
只是看这个,还是不解决眼前问题,不知道到咋做啊。
后来发现,虽然onMenuOpened方法不执行,但是onPrepareOptionsMenu(Menu menu)、onPrepareOptionsPanel(View view, Menu menu) 等都可以执行,
于是采用下面的方法:
@Overridepublic boolean onPrepareOptionsMenu(Menu menu) { if (menu != null) { if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod( "setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e); } } } return super.onPrepareOptionsMenu(menu);}
或者放到
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
……
//方法语句
……
return super.onPrepareOptionsPanel(view, menu);
}
都可以执行,折腾许久的菜单图标也终于出来了!
- 终于暂时解决了actionbar溢出菜单显示图标的问题
- actionbar溢出菜单显示图标的问题
- Actionbar 中解决溢出菜单不显示的问题
- Actionbar 中解决溢出菜单不显示的问题
- 解决 Actionbar 溢出菜单不显示的问题
- Actionbar 中解决溢出菜单不显示的问题
- Actionbar 中解决溢出菜单不显示的问题
- Actionbar 解决溢出菜单不显示的问题
- actionbar -- 溢出菜单中既显示图标又显示文字
- ActionBar(12)用反射法-让溢出菜单里的item显示图标
- 困扰我多次的内存溢出问题终于解决了
- android的actionbar的溢出菜单默认不显示图标icon,怎样弄成微信那样可以显示icon
- ActionBar溢出菜单的icon不显示的解决方法
- [android开发] 解决菜单项图标不显示的问题
- 困扰许久的文泉驿显示慢问题终于解决了
- ActionBar 溢出菜单和兼容问题解决
- 郁闷了2天的问题终于解决了(MSDN无法显示页面的解决 )
- 解决ActionBar中的item不显示在ActionBar的问题
- bootstrap 轮播总结
- C++中export关键字的尴尬处境
- 适合于图像处理方向的SCI期刊杂志列表
- 从“增信”到“征信”:互联网金融时代的中国个人征信体系发展
- 选择ABBYY PDF Transformer+ 三大理由
- 终于暂时解决了actionbar溢出菜单显示图标的问题
- Android weight权重适配
- static使用相关详解
- php中使用引用和global
- 静态注册的广播每次接收广播都会重新生成一个接收广播的对象
- vs2012 遇到 First_Chance Exception 的问题
- 关于viewpager+fragment中嵌套viewpager+fragment的问题处理:
- HTML + CSS短标题(二,三,四文字长度)两端对齐的方式
- css笔记