在有的Android的App中,若ActionBar中的菜单项过多,会显示一个OverFlow图标(有三个纵向的点)如下图所示:
比较遗憾的是,这个图标的显示,与Android版本以及Menu项的数目相关。
如何强制显示这个Overflow图标呢?
经过查找,有如下两种方案。
1、进行Hack
在onCreate中添加如下Hack代码
try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { // presumably, not relevant }
比较遗憾的是,上述所使用的sHasPermanentMenuKey并未在官方文档中提及,也就是说,在未来很可能被废弃。
2、将一个MenuItem“伪装”成Overflow图标
如下所示,我们可以设置一个父子菜单,然后对父菜单设置icon,来完成同样的功能。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/saveDetails" android:showAsAction="always" android:title="@string/save"/> <item android:id="@+id/menu_overflow" android:icon="@drawable/dts" android:orderInCategory="11111" android:showAsAction="always"> <menu> <item android:id="@+id/contacts" android:showAsAction="never" android:title="Contacts"/> <item android:id="@+id/service_Tasks" android:showAsAction="never" android:title="Service Tasks"/> <item android:id="@+id/charge_summary" android:showAsAction="never" android:title="Charge Summary"/> <item android:id="@+id/capture_signature" android:showAsAction="never" android:title="Capture Signature"/> </menu> </item> </menu>
这样搞完后,有个缺点,就是submenu会在屏幕顶部显示,而不是actionbar底部显示,经过查询,可以按照这样的方法进行处理,即单独添加submenu。